1. 程式人生 > >給 SwitchCompat 設定顏色的方法

給 SwitchCompat 設定顏色的方法

本文介紹 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 的顏色完全由開發者指定。