給 SwitchCompat 設定顏色的方法
阿新 • • 發佈:2019-01-28
本文介紹 SwitchCompat 控制元件設定顏色的方法。
安卓常見的開關控制元件及其樣式如下圖:
SwitchCompat 控制元件有 thumb(圓) 和 track(橫條)兩部分組成:
設定 thumb 和 track 的顏色的方式有兩種,分別是通過 xml 和 Java 程式碼。
xml 方式
style.xml
<style name="MySwitchTheme">
<item name="colorControlActivated">#FFFF6633</item>
<item name ="colorSwitchThumbNormal">#FFF1F1F1</item>
<item name="android:colorForeground">#FF2F2F2F</item>
</style>
佈局檔案:
<android.support.v7.widget.SwitchCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:theme="@style/MySwitchTheme" />
java 程式碼方式:
public static void setSwitchColor(SwitchCompat v) {
// thumb color
int thumbColor = 0xffFF6633;
// trackColor
int trackColor = 0xfff1f1f1;
// set the thumb color
DrawableCompat.setTintList(v.getThumbDrawable(), new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_checked},
new int[]{}
},
new int[]{
thumbColor,
trackColor
}));
// set the track color
DrawableCompat.setTintList(v.getTrackDrawable(), new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_checked},
new int[]{}
},
new int[]{
0x4DFF6633,
0x4d2f2f2f
}));
}
其中 xml 方式比較方便,缺點是在開和關狀態下,track 會自動把 colorControlActivated 和 android:colorForeground 的顏色值加上 30%(0.3 * ff = 4D)透明度作為自己的顏色值。這一點開發者不可控。
而 Java 程式碼方式則可以規避這一預設規則,使得開和關狀態下 track 和 thumb 的顏色完全由開發者指定。