本文為 Nick Rout 發(fā)布于 Medium 的文章譯文(Google 翻譯)
原文鏈接為 Hands-on with Material Components for Android: Selection Controls
本文僅作為個人學(xué)習(xí)記錄所用。如有涉及侵權(quán),請相關(guān)人士盡快聯(lián)系譯文作者。
Android MDC 系列文章:
- 第一篇:【譯】為Android設(shè)置Material Components主題
- 第二篇:【譯】Android材質(zhì)組件的動手實踐:Bottom App Bar
- 第三篇:【譯】Android材質(zhì)組件的動手實踐:Bottom Navigation
- 第四篇:【譯】Android材質(zhì)組件的動手實踐:Bottom Sheet
- 第五篇:【譯】Android材質(zhì)組件的動手實踐:Buttons
- 第六篇:【譯】Android材質(zhì)組件的動手實踐:Chips
- 第七篇:【譯】Android材質(zhì)組件的動手實踐:Cards
- 第八篇:【譯】Android材質(zhì)組件的動手實踐:Dialogs
- 第九篇:【譯】Android材質(zhì)組件的動手實踐:Selection Controls
這篇文章將介紹 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 的單選行為。

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,MaterialCheckBox和SwitchMaterial風(fēng)格,引用它們與您的應(yīng)用程序的主題radioButtonStyle,checkboxStyle并switchStyle分別屬性。
顏色
選擇控件默認(rèn)為顏色colorOnSurface(選中),并colorControlActivated即colorSecondary在你的應(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)整。
更多資源??
- 本文中使用的Playground應(yīng)用程序的源代碼可以在GitHub上找到。
- 選擇控件設(shè)計文檔
- 單選按鈕API文檔
- 復(fù)選框API文檔
- 開關(guān)API文檔
我希望這篇文章對單選按鈕,復(fù)選框和開關(guān)以及如何在您的Android應(yīng)用程序中使用它們提供了一些見識。如果您有任何疑問,想法或建議,那么我很樂意收到您的來信!
在Twitter上找到我@ricknout