MDC-111 Android:將 Material 元件整合至程式碼集 (Kotlin)

1. 簡介

logo_components_color_2x_web_96dp.png

開發人員可透過 Material 元件 (MDC) 實作 Material Design。MDC 由 Google 的工程師和 UX 設計師團隊建立,提供數十種美觀實用的 UI 元件,適用於 Android、iOS、網頁和 Flutter。material.io/develop

Android 適用的 Material Design 元件 (MDC Android) 並非新系統或架構,不會要求您改變應用程式的範例。MDC Android 是以您在 Android 中已知的類別和 API 為基礎建構而成,例如 AppCompat 按鈕和文字欄位。您可以視需要使用 MDC Android 提供的元件,立即改善現有應用程式的設計。

建構項目

在本程式碼研究室中,您將使用 MDC,將表單中的部分現有元件換成新元件。

本程式碼研究室中的 MDC-Android 元件

  • 文字欄位
  • 按鈕
  • 選單

軟硬體需求

  • 具備 Android 開發的基本知識
  • Android Studio (如果沒有,請在這裡下載)
  • Android 模擬器或裝置 (可透過 Android Studio 取得)
  • 範例程式碼 (請參閱下一個步驟)

您對建構 Android 應用程式的經驗程度為何?

新手 中級 熟練

2. 設定開發環境

下載程式碼研究室的入門應用程式

入門應用程式位於 material-components-android-codelabs-111-starter/kotlin 目錄中。開始前,請務必 cd 到該目錄。

...或從 GitHub 複製

如要從 GitHub 複製本程式碼研究室,請執行下列指令:

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 Studio 可能會引發一些建構錯誤,因為您缺少 Android SDK 或建構工具,如下所示。按照 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. 在「系統映像檔」畫面中,選取最新的 Android 版本,最好是最高的 API 級別。如果尚未安裝,請按一下顯示的「下載」連結,然後完成下載。
  6. 點選 [下一步]。
  7. 在「Android Virtual Device (AVD)」畫面上,保留預設設定並按一下「Finish」
  8. 從部署目標對話方塊中選取 Android 裝置
  9. 按一下 [確定]。
  10. Android Studio 會建構及部署應用程式,並在目標裝置上自動開啟。

太棒了,您應該會看到應用程式和表單。

dba8e6132a12da58.png

3. 更新文字欄位

相較於純文字欄位,Material Design 文字欄位在可用性方面有大幅提升。使用輪廓或背景填滿定義點擊區後,使用者更有可能與表單互動,或在較複雜的內容中識別文字欄位。

匯入 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 文字欄位內建錯誤呈現方式。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!
       }
   }
}

建構並執行。按下「儲存」,但至少將一個文字欄位留空:

ef2a846d08f2780d.png

空白文字欄位會以紅色顯示,下方則會顯示錯誤文字。

4. 更新按鈕

MDC 的按鈕具有下列特點:

  • 墨水波紋
  • 圓角
  • 主題設定支援
  • 鉅細靡遺的版面配置和排版
  • 以 AppCompatButton (標準 Android 按鈕類別) 為基礎建構,因此您知道如何在程式碼中使用這些按鈕。

(選用) 取代按鈕類別

根據預設,Material 程式庫會自動將一般按鈕膨脹為 MDC 按鈕。不過,您可以選擇將所有 Button 參照替換為 MaterialButton,以便存取僅適用於 MaterialButton 的其他方法,例如變更圓角半徑。MDC 按鈕是簡單的隨插即用元件。您只要將 XML 元件名稱 Button 替換為 MaterialButton,然後將預設的 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. 新增卡片

MaterialCardView 是以 CardView 為基礎建構的元件,具有下列特點:

  • 修正高度和樣式
  • 筆劃寬度和顏色屬性

將內容包裝在資訊卡中

將包含內容的 LinearLayout 包裝在 shipping_info_activity.xml 中,並使用 MaterialCardView 元件,如下所示:

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

Material Card View 元件是熟悉但新穎的方式,可輕鬆將內容包裝在資訊卡中。

6. 重點回顧

您已替換一些常見的元件來顯示即時值:文字欄位、按鈕、資訊卡,而且不必重新設計整個應用程式。其他元件也能帶來顯著差異,例如頂端應用程式列和 TabLayout。

後續步驟

如要進一步探索 MDC-Android 中的元件,請前往 Android 視窗小工具目錄

我能夠在合理的時間和精力內完成本程式碼研究室

非常同意 同意 沒意見 不同意 非常不同意

我希望日後繼續使用 Material Design 元件

非常同意 同意 沒意見 不同意 非常不同意