MaterialButton
MaterialButton是Google于SDK28推出的新控件,當(dāng)遇到按鈕需要圓角、或者描邊等,就不必使用xml文件或者Github上找第三方庫(kù)實(shí)現(xiàn)。
效果預(yù)覽

依賴引入
-
添加依賴
com.google.android.material:material:1.3.0 -
app 的theme主題修改
android:theme="@style/Theme.MaterialComponents.Light.NoActionBar"
繼承關(guān)系
java.lang.Object
?android.view.View
?android.widget.TextView
?android.widget.Button
?androidx.appcompat.widget.AppCompatButton
?com.google.android.material.button.MaterialButton
MaterialButton繼承AppCompatButton,所以它擁有AppCompatButton所有的特性,且在其基礎(chǔ)上做了一些擴(kuò)展,如圓角、描邊、前置和后置icon(支持設(shè)置Size、Tint、Padding、Gravity等),還支持按壓水波紋并且自定義顏色。
關(guān)鍵屬性
| 屬性 | 描述 | 參數(shù) |
|---|---|---|
| app:backgroundTint | 背景著色 | 默認(rèn)為?attr/colorPrimary |
| app:backgroundTintMode | 著色模式 | add,multiply,screen,src_atop,src_in,src_over |
| app:strokeColor | 描邊顏色 | |
| app:strokeWidth | 描邊寬度 | |
| app:cornerRadius | 圓角大小 | |
| app:rippleColor | 按壓水波紋顏色 | |
| app:icon | 圖標(biāo)icon | |
| app:iconSize | 圖標(biāo)大小 | |
| app:iconGravity | 圖標(biāo)重心 | start,end.textStart,textEnd |
| app:iconTint | 圖標(biāo)著色 | |
| app:iconTintMode | 圖標(biāo)著色模式 | add,multiply,screen,src_atop,src_in,src_over |
| app:iconPadding | 圖標(biāo)和文本之間的間距 |
注意事項(xiàng)
不可以使用
android:background設(shè)置按鈕背景,會(huì)破壞MaterialButton本身的繪制,而設(shè)置背景則推薦使用app:backgroundTint-
MaterialButton創(chuàng)建后,按鈕實(shí)際長(zhǎng)度并不是設(shè)定值,因?yàn)樗舷掠辛艨?,可以使?/p>
android:insetBottom="0dp"
和android:insetTop="0dp"去除 -
去除陰影
MD控件默認(rèn)有陰影效果,但是有時(shí)候我們并不想要按鈕有陰影,那么這時(shí)候可以指定style為
style="@style/Widget.MaterialComponents.Button.UnelevatedButton"這樣就能去掉陰影,讓視圖看起來(lái)扁平化 -
閃退
修改APP主題
android:theme="@style/Theme.MaterialComponents.Light.NoActionBar"
MaterialButtonToggleGroup
效果預(yù)覽
-
單選

-
多選

繼承關(guān)系
java.lang.Object
?android.view.View
?android.view.ViewGroup
?android.widget.LinearLayout
?com.google.android.material.button.MaterialButtonToggleGroup
類(lèi)似一個(gè)LinearLayout,但只能添加MaterialButton,只有第一個(gè)子元素的最左邊角和最后一個(gè)子元素的最右邊角才能保留它們的形狀外觀圓角大小,類(lèi)似于iOS中的SegmentedControl, 用戶可以從組中選擇一個(gè)或多個(gè)選項(xiàng)。
公開(kāi)屬性
| 屬性 | 描述 | 參數(shù) |
|---|---|---|
| app:checkedButton | 默認(rèn)選中 | 按鈕ID |
| app:singleSelection | 是否單項(xiàng)選擇 | true/false |
| app:selectionRequired | 設(shè)置為true后,強(qiáng)制至少選中一個(gè) | true/false |
tab切換監(jiān)聽(tīng)
MaterialButtonToggleGroup materialButtonToggleGroup = findViewById(R.id.toggleGroup);
materialButtonToggleGroup.addOnButtonCheckedListener(new MaterialButtonToggleGroup.OnButtonCheckedListener() {
@Override
public void onButtonChecked(MaterialButtonToggleGroup group, int checkedId, boolean isChecked) {
Toast.makeText(MainActivity.this, "ID:" + checkedId + ", checked:" + isChecked, Toast.LENGTH_SHORT).show();
}
});