Android Design Support libraryを使う (1)

この記事は2016年3月1日に書かれたものです。内容が古い可能性がありますのでご注意ください。


Android Design Support libraryはAndroid Support Library 22.2で公開された、
マテリアルデザインを実現するのに便利なコンポーネントのライブラリです。
アプリのマテリアルデザイン対応を楽に進めるためにも積極的に利用したいところです。

そんなDesign Support libraryのコンポーネントの紹介と使い方の説明をしていきたいと思います。

*以下の内容の対応OSはAndroid 2.1 以上です。

導入方法

まずは何はともあれアプリへライブラリを導入をするところから。

build.gradleのdependenciesに以下の一行を追加すればOKです。

build.gradle

dependencies {
    compile 'com.android.support:design:22.2.0'
}

コンポーネント

Design Support libraryには以下のコンポーネントが用意されています。

  • TextInputLayout
  • FloatingActionButton
  • Snackbar
  • TabLayout
  • NavigationView
  • CoordinatorLayout
  • AppBarLayout
  • CollapsingToolbarLayout

まずは学習コストの低いところからとりあげていってみます。

Snackbar

Snackbarとはユーザの操作に対する簡易なフィードバックを行うのに用いるコンポーネントです。
簡易なメッセージを表示できる点と、一定時間後自動的に消える挙動がToastに似ていますね。

使い方もToastに似ており簡単です。

                Snackbar.make(findViewById(android.R.id.content), "Snackbar text", Snackbar.LENGTH_LONG)
                        .show();

第一引数には親View、第二引数にはSnackbar上に表示するテキスト、第三引数には表示時間の長さ定数をとります。
上の例ではfindViewById(android.R.id.content)でActivityのroot viewを取得して与えています。

下記動画はSNACKBARボタンを押したらSnackbarが表示されるサンプルです。

SnackbarToastとの大きな違いは、それ自体にアクションを定義できることです。

                Snackbar.make(findViewById(android.R.id.content), "Snackbar Sample", Snackbar.LENGTH_LONG)
                        .setAction("ACT", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                //アクション
                            }
                        })
                        .show();

show()を呼ぶ前にsetAction()でアクションを定義します。setAction()の第一引数にはSnackbar上のボタンのテキスト、第二引数にはアクションボタンが押されたときのコールバックを与えます。

snackbar_act

TextInputLayout

TextInputLayoutEditTextと組み合わせてよりわかりやすい入力領域を実装するためのコンポーネントです。
従来のEditTextのhintはEditTextにフォーカスがあたると見えなくなってしまいましたが、
TextInputLayoutを用いるとフローティングラベルとして表示することができます。
また、入力エラーメッセージの表示も簡単に行えるようになります。

こちらも使い方は簡単で、EditTextTextInputLayoutで囲んであげます。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="jp.techpjin.designlibrarysample.MainActivity"
    android:orientation="vertical"
    android:focusableInTouchMode="true">

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/text_input_layout"
        >

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edit_text"
            android:hint="hint"
            android:inputType="text" />

    </android.support.design.widget.TextInputLayout>

</LinearLayout>

これによりEditTextにフォーカスが当たったときhintがふわっと上部に移動します。

エラーメッセージを表示する場合はJava側で以下のようにします。

TextInputLayout textInputLayout = (TextInputLayout)findViewById(R.id.text_input_layout);
textInputLayout.setErrorEnabled(true);
textInputLayout.setError("error message");

textinputlayout_error
また、エラーメッセージを非表示に戻す場合はsetErrorEnabled(false)としてやればよいです。

TextInputLayoutのカスタマイズ

TextInputLayoutのhintフローティングラベルやエラーの表示を変更は以下の方法で行えます。
まずstyles.xmlに次のstyleを定義しておきます。

styles.xml

<style name="TextInputLayoutHint" parent="TextAppearance.AppCompat">
	<item name="android:textColor">#0021f7</item>
</style>

<style name="TextInputLayoutError" parent="TextAppearance.AppCompat">
	<item name="android:textColor">#f70000</item>
</style>

後はTextInputLayoutに属性を追加すればOKです。

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/text_input_layout"
    app:hintTextAppearance="@style/TextInputLayoutHint"
    app:errorTextAppearance="@style/TextInputLayoutError"
    >

まとめ

Design Support libraryの導入とSnackbarとTextInpuLayoutの使い方を紹介しました。
Snackbarはアクションをセットできる簡易メッセージ表示をするコンポーネントです。
TextInpuLayoutはEditTextをラップして入力領域を支援するコンポーネントです。
他のコンポーネントはまた記事にしたいと思います。

  • このエントリーをはてなブックマークに追加

PAGE TOP