MDC-111 Android: マテリアル コンポーネントをコードベースに組み込む(Kotlin)

1. はじめに

logo_components_color_2x_web_96dp.png

マテリアル コンポーネント(MDC)は、デベロッパーがマテリアル デザインを実装する際に役立ちます。Google のエンジニアと UX デザイナーのチームが作成した MDC には、美しく機能的な UI コンポーネントが多数含まれており、Android、iOS、ウェブ、Flutter.material.io/develop に利用可能です。

Android 向けマテリアル コンポーネント(MDC Android)は、アプリのパラダイム シフトを必要とする新しいシステムまたはフレームワークではありません。MDC Android は、AppCompat ボタンやテキスト フィールドなど、Android ですでに使用されているクラスや API をベースにして構築されています。MDC Android が提供するコンポーネントは、必要に応じて使用でき、既存のアプリのデザインをすぐに改善できます。

作成するアプリの概要

この Codelab では、フォーム内の既存のコンポーネントの一部を MDC によって新しいコンポーネントに置き換えます。

この Codelab の MDC-Android コンポーネント

  • テキスト フィールド
  • ボタン
  • メニュー

必要なもの

  • Android 開発に関する基本的な知識
  • Android Studio(まだお持ちでない場合はこちらからダウンロードしてください)
  • Android Emulator または Android デバイス(Android Studio から入手可能)
  • サンプルコード(次の手順を参照)

Android アプリの作成経験はどの程度ありますか?

<ph type="x-smartling-placeholder"></ph> 初心者 中級 上達 をご覧ください。

2. 開発環境を設定する

Codelab のスターター アプリをダウンロードする

スターター アプリは material-components-android-codelabs-111-starter/kotlin ディレクトリにあります。開始する前に、そのディレクトリへの cd を行ってください。

GitHub からクローンを作成する

GitHub からこの Codelab のクローンを作成するには、次のコマンドを実行します。

git clone https://github.com/material-components/material-components-android-codelabs
cd material-components-android-codelabs/
git checkout 111-starter

Android Studio にスターター コードを読み込む

  1. 設定ウィザードが完了し、[Welcome to Android Studio] ウィンドウが表示されたら、[Open an existing Android Studio project] をクリックします。サンプルコードをインストールしたディレクトリに移動し、kotlin ->shipping [送料] を(またはパソコンで「shipping」で検索)して、Shipping プロジェクトを開きます。
  2. Android Studio がプロジェクトをビルドして同期するまで待ちます。進捗状況は、Android Studio ウィンドウ下部のアクティビティ インジケーターに表示されます。
  3. この時点では、Android SDK やビルドツール(以下に示すものなど)が不足しているため、Android Studio でビルドエラーが発生する場合があります。Android Studio の手順に沿って、これらをインストールまたは更新し、プロジェクトを同期します。

2wEZ1kuSFwiRvi_vYXnYfwoQ5J79OVBi1SL6044ETje5cDT2rUHGy8ExjGxlBWlWuNUMf5tkLRUrr2_bz_0Im_JDvLyC-X-tNmBJvKUgsn8T4d11A1cq0ItqQl2n6DJrYKY-dEyRdw

スターター アプリを実行する

  1. [Run / Play] ボタンの左側のビルド構成が app であることを確認します。
  2. 緑色の [Run / Play] ボタンを押して、アプリをビルドし実行します。
  3. [Select Deployment Target] ウィンドウで、利用可能なデバイスの一覧にすでに Android デバイスが表示されている場合は、ステップ 8 に進みます。それ以外の場合は、[Create New Virtual Device] をクリックします。
  4. [Select Hardware] 画面で [Pixel 2] などのスマートフォン デバイスを選択し、[Next] をクリックします。
  5. [System Image] 画面で、最新の Android バージョン(可能であれば API レベルが最も高いもの)を選択します。インストールされていない場合は、表示される [Download] をクリックして、ダウンロードを完了します。
  6. [Next] をクリックします。
  7. [Android Virtual Device (AVD)] 画面で、設定をそのままにして [Finish] をクリックします。
  8. デプロイ ターゲット ダイアログで [Android デバイス] を選択します。
  9. [OK] をクリックします。
  10. Android Studio によってアプリがビルドおよびデプロイされ、対象デバイスでそのアプリが自動的に開きます。

完了しました。アプリとそのフォームが表示されます。

dba8e6132a12da58.png

3. テキスト フィールドを更新する

マテリアル デザインのテキスト フィールドは、書式なしテキスト フィールドに比べてユーザビリティが大幅に向上しています。ヒットゾーンを枠線や背景の塗りつぶしで定義すると、ユーザーがフォームを操作したり、より複雑なコンテンツ内のテキスト フィールドを識別したりする可能性が高まります。

MDC-Android をインポートする

app モジュールの build.gradle ファイルに移動し、dependencies ブロックに MDC Android への依存関係が含まれていることを確認します。

api 'com.google.android.material:material:1.1.0-alpha05'

テキスト フィールドのスタイルを置き換える

shipping_info_activity.xml で、すべての TextInputLayout XML コンポーネントに次のスタイルを追加します。

shipping_info_activity.xml

style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"

TextInputLayout は次のようになります。

shipping_info_activity.xml

<com.google.android.material.textfield.TextInputLayout
   android:id="@+id/name_text_input"
   style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   app:errorEnabled="true">

   <com.google.android.material.textfield.TextInputEditText
       android:id="@+id/name_edit_text"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="@string/label_name" />
</com.google.android.material.textfield.TextInputLayout>

ビルドして実行します。

824c2b33592b2c7e.png

テキスト フィールドはすべて MDC の新しいデザインに合わせて更新されます。

エラーを追加する

MDC テキスト フィールドにはエラー表示が組み込まれています。テキスト フィールドの下に赤いテキストが追加され、装飾も赤色に更新されます。

ShippingInfoActivity.kt で、onCreate() を更新してテキスト入力を確認し、必要に応じてエラーを設定します。次のようになります。

ShippingInfoActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.shipping_info_activity)

   val rootView = findViewById<View>(android.R.id.content)

   val textInputLayouts = Utils.findViewsWithType(
           rootView, TextInputLayout::class.java)

   save_button.setOnClickListener {
       var noErrors = true
       for (textInputLayout in textInputLayouts) {
           val editTextString = textInputLayout.editText!!.text.toString()
           if (editTextString.isEmpty()) {
               textInputLayout.error = resources.getString(R.string.error_string)
               noErrors = false
           } else {
               textInputLayout.error = null
           }
       }

       if (noErrors) {
           // All fields are valid!
       }
   }
}

ビルドして実行します。[保存] をクリックします。ただし、少なくとも 1 つのテキスト フィールドは空のままにしておきます。

ef2a846d08f2780d.png

空のテキスト フィールドは赤色で、その下にエラーテキストが表示されます。

4. ボタンを更新する

MDC には、次のボタンがあります。

  • インクのさざ波
  • 角丸
  • テーマ設定のサポート
  • ピクセル完璧なレイアウトとタイポグラフィ
  • AppCompatButton(標準の Android ボタンクラス)上に構築されているため、コードで使用する方法を理解できます。

オプションでボタンクラスを置き換える

デフォルトでは、マテリアル ライブラリは通常のボタンを MDC ボタンに自動的にインフレートします。ただし、必要に応じて、Button へのすべての参照を MaterialButton に置き換えることができます。これにより、角の丸みの変更など、MaterialButton でのみ使用できる追加のメソッドにアクセスできるようになります。MDC ボタンはシンプルなプラグアンドプレイ コンポーネントです。XML コンポーネント名 ButtonMaterialButton に置き換え、デフォルトの MaterialButton スタイルを MaterialButton に適用します。

shipping_info_activity.xml でボタンを次のように変更します。

shipping_info_activity.xml

<Button
   android:id="@+id/save_button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="end"
   android:layout_marginTop="16dp"
   android:text="@string/label_save" />

宛先:

shipping_info_activity.xml

<com.google.android.material.button.MaterialButton
   android:id="@+id/save_button"
   style="@style/Widget.MaterialComponents.Button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="end"
   android:layout_marginTop="16dp"
   android:text="@string/label_save" />

ビルドして実行します。

824c2b33592b2c7e.png

5. カードを追加

MaterialCardViewCardView 上に構築されたコンポーネントで、次のものが含まれます。

  • 高度とスタイルを修正する
  • ストロークの幅と色の属性

カードでコンテンツをラップする

次のように、shipping_info_activity.xml のコンテンツを含む LinearLayoutMaterialCardView コンポーネントでラップします。

shipping_info_activity.xml

<com.google.android.material.card.MaterialCardView
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_margin="16dp"
   app:contentPadding="16dp">


   <!-- LinearLayout goes here -->


</com.google.android.material.card.MaterialCardView>

ビルドして実行します。フォーム全体をカードで囲む必要があります。

75c86ab9fa395e3c.png

マテリアル カードビュー コンポーネントは、コンテンツをカード内で簡単にラップできる、おなじみの、新しい方法です。

6. まとめ

テキスト フィールド、ボタン、カードなど、いくつかの共通コンポーネントを置き換えて即時の価値を示すことができました。また、アプリを全面的に再設計する必要はありません。トップ アプリバーや TabLayout などの他のコンポーネントも大きな違いを生む可能性があります。

次のステップ

MDC-Android のその他のコンポーネントについては、Android ウィジェット カタログをご覧ください。

この Codelab を完了するためにそれなりの時間と労力を必要とした

非常にそう思う そう思う どちらとも言えない そう思わない まったくそう思わない

今後もマテリアル コンポーネントを使用したい

<ph type="x-smartling-placeholder"></ph> 非常にそう思う そう思う どちらとも言えない そう思わない まったくそう思わない をご覧ください。