一:使用主題色
1.給View設(shè)置主題
<style name="MyCheckBoxTheme" parent="Base.Widget.AppCompat.CompoundButton.CheckBox">
<item name="colorControlActivated">#0FF</item>
<item name="colorControlNormal">#FFF</item>
</style>
<android.support.v7.widget.AppCompatCheckBox
android:theme="@style/MyCheckBoxTheme"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
2.給Activity設(shè)置主題
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorControlActivated">#0FF</item>
<item name="colorControlNormal">#FFF</item>
</style>
然后將AppTheme設(shè)置給對應(yīng)的Activity
其實主要是colorControlActivated和colorControlNormal在控制它的顏色,colorControlNormal是指正常情況下的顏色,也就是checked等于false的時候的顏色;colorControlActivated是指選中時的顏色俩由,也就是checked等于true的時候的顏色。
當沒有給定colorControlActivated對應(yīng)的顏色時那么colorAccent對應(yīng)的顏色就決定了它選中的顏色会前。
弊端:只能在加載布局的時候應(yīng)用主題顏色左敌,不能通過代碼動態(tài)改變顏色忌警。
二:buttonTint著色
<android.support.v7.widget.AppCompatCheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/colorPrimary"/>
如果傳入的是一個顏色值那就是給整個勾選框染上指定的顏色止潘,在這里也可以寫一個顏色選擇器掺炭,通過狀態(tài)給勾選框著色。
弊端:有API版本限制凭戴,最低可用于android5.0涧狮,低于android5.0的設(shè)備是無法修改顏色的,同樣只能在加載布局的時候應(yīng)用顏色么夫。
三:setButtonTintList和setSupportButtonTintList
- checkbox.setButtonTintList可以動態(tài)修改顏色者冤,但是有API版本限制,最低可用于android5.0的設(shè)備档痪。
AppCompatCheckBox checkbox = findViewById(R.id.checkbox);
checkbox.setButtonTintList(ColorStateList.valueOf(Color.CYAN));
2.checkbox.setSupportButtonTintList這個方法并沒有暴露出來給開發(fā)者使用涉枫,僅僅用于support v4包里面。
/**
* This should be accessed from {@link android.support.v4.widget.CompoundButtonCompat}
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
@Override
public void setSupportButtonTintList(@Nullable ColorStateList tint) {
if (mCompoundButtonHelper != null) {
mCompoundButtonHelper.setSupportButtonTintList(tint);
}
}
四:使用CompoundButtonCompat類
這個類一看就知道是兼容用的腐螟,用法其實很簡單:
AppCompatCheckBox checkbox = findViewById(R.id.checkbox);
CompoundButtonCompat.setButtonTintList(checkbox,ColorStateList.valueOf(Color.CYAN));
其實不能使用的setSupportButtonTintList這個方法里面也是調(diào)用CompoundButtonCompat.setButtonTintList實現(xiàn)著色的愿汰。
五:總結(jié)
動態(tài)修改AppCompatCheckBox和AppCompatRadioButton的顏色就使用CompoundButtonCompat.setButtonTintList;布局里面應(yīng)用顏色就使用主題去修改遭垛。