【譯】Android材質(zhì)組件的動手實踐:Selection Controls

本文為 Nick Rout 發(fā)布于 Medium 的文章譯文(Google 翻譯)
原文鏈接為 Hands-on with Material Components for Android: Selection Controls
本文僅作為個人學(xué)習(xí)記錄所用。如有涉及侵權(quán),請相關(guān)人士盡快聯(lián)系譯文作者。


Android MDC 系列文章:


這篇文章將介紹 Radio Button, Checkbox 和 Switch 組件的功能和API。要了解如何處理Android的Material Components的初始設(shè)置(包括Gradle依賴關(guān)系和創(chuàng)建應(yīng)用程序主題),請參閱我的原始文章:

為Android設(shè)置Material Components主題

選擇控件是用戶需要選擇選項或切換設(shè)置的方案的小組件。通常可以在設(shè)置屏幕和對話框中找到它們。

從設(shè)計的角度來看,可以在三種不同的情況下使用三種主要的選擇控件:

  • 單選按鈕:具有兩個可能狀態(tài)的圓形控件;選擇或未選擇。在一組其他單選按鈕中時具有單選行為(即一次只能選擇一個控件)。
  • 復(fù)選框:具有兩個可能狀態(tài)的方形控件;選中或未選中。在一組其他復(fù)選框中時具有多選行為(即一次可以選擇多個控件)。
  • 開關(guān):包含拇指和軌跡的控件。有兩種可能的狀態(tài);開啟或關(guān)閉。

基本用法??

MaterialRadioButton,MaterialCheckBox 或者 SwitchMaterial 可以包含在你的布局像這樣:

<LinearLayout
  ...>

  <com.google.android.material.radiobutton.MaterialRadioButton
    android:id="@+id/radioButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Radio Button" />

  <com.google.android.material.checkbox.MaterialCheckBox
    android:id="@+id/checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Checkbox" />
  <!-- Note: ID cannot be 'switch' as this is a Java keyword -->
  <com.google.android.material.switchmaterial.SwitchMaterial
    android:id="@+id/switchMaterial"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Switch" />

</LinearLayout>

設(shè)置并監(jiān)聽選中狀態(tài)??

所有選擇控件都從基 CompoundButton 類擴(kuò)展。因此,它們繼承了可檢查的行為,該行為可以通過編程方式或通過觸摸交互進(jìn)行切換。

可以通過編程方式切換選擇控件:

radioButton.isChecked = true
checkbox.isChecked = true
switchMaterial.isChecked = true

偵聽已檢查/未檢查狀態(tài)的更改是這樣的:

radioButton.setOnCheckedChangeListener { radioButton, isChecked ->
    // Handle radio button checked/unchecked
}
checkbox.setOnCheckedChangeListener { checkbox, isChecked ->
    // Handle checkbox checked/unchecked
}
switchMaterial.setOnCheckedChangeListener { switch, isChecked ->
    // Handle switch checked/unchecked
}

分組選擇控件???????????

選擇控件通常成組使用。嚴(yán)格來說,任何方法ViewGroup都可以用來實現(xiàn)這一目標(biāo)(例如a RecyclerView)。話雖這么說, RadioGroup 該類的存在是為了專門處理MaterialRadioButtons 的單選行為。

與RadioGroup分組的MaterialRadioButtons

MaterialRadioButton可將s與分組,RadioGroup例如:

<RadioGroup
  android:id="@+id/radioGroup"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="vertical">

  <com.google.android.material.radiobutton.MaterialRadioButton
    android:id="@+id/option1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="First Option" />

  <com.google.android.material.radiobutton.MaterialRadioButton
    android:id="@+id/option2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Second Option" />

  ...

</RadioGroup>

存在許多用于以編程方式設(shè)置,獲取和監(jiān)聽子 MaterialRadioButton 檢查/未檢查狀態(tài)更改的API :

radioGroup.check(R.id.option1)
val checkedRadioButtonId = chipGroup.checkedRadioButtonId // Will return View.NO_ID if nothing checked
radioGroup.setOnCheckedChangeListener { group, checkedId ->
    // Handle child MaterialRadioButton checked/unchecked
}

主題??

選擇控件可以根據(jù)三個“材料主題”子系統(tǒng)來主題化:顏色,版式形狀。在實現(xiàn)全球定制MaterialRadioButton,MaterialCheckBoxSwitchMaterial風(fēng)格,引用它們與您的應(yīng)用程序的主題radioButtonStylecheckboxStyleswitchStyle分別屬性。

顏色

選擇控件默認(rèn)為顏色colorOnSurface(選中),并colorControlActivatedcolorSecondary在你的應(yīng)用主題(選中)定義。為了在每個控件級別覆蓋此設(shè)置,您將需要:

  • 使用具有上述顏色屬性的主題疊加層,將其應(yīng)用于具有該顏色的窗口小部件android:theme。
  • 設(shè)置useMaterialThemeColors屬性設(shè)置為false,并應(yīng)用自定義色彩ColorStateList使用 CompoundButtonCompat#setButtonTintList。
顏色主題

版式

選擇控件的文本標(biāo)簽將采用fontFamily您的應(yīng)用主題中定義的屬性。為了以樣式或在每個控件級別覆蓋此android:textAppearance屬性,請使用屬性。

字體樣式主題

形狀

沒有任何選擇控件的任何方面都可以通過形狀主題進(jìn)行調(diào)整。

更多資源??


我希望這篇文章對單選按鈕,復(fù)選框和開關(guān)以及如何在您的Android應(yīng)用程序中使用它們提供了一些見識。如果您有任何疑問,想法或建議,那么我很樂意收到您的來信!

在Twitter上找到我@ricknout

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容