Как изменить цвет трека SwitchCompat

Я попытался использовать следующую ссылку, чтобы изменить цвет SwitchCompat:

Как изменить цвет коммутатора

Обратите внимание на низкую константу в моем переключателе:

SwitchCompat

Но после изменения всех соответствующих значений цвета дорожка (более яркая серая) SwitchCompat остается неизменной. Я не хочу менять внешний вид, кроме цвета. Большой палец в розовом, и я хочу, чтобы трек имел некоторый контраст. Мне не удалось определить значение в моих стилях.xml?

Я пробовал эти значения (случайные небелые цвета):

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/first</item> <item name="colorPrimaryDark">@color/second</item> <item name="colorAccent">@color/third</item> ... <item name="colorControlActivated">@color/first</item> <item name="colorControlHighlight">@color/first</item> <item name="colorControlNormal">@color/second</item> <item name="colorSwitchThumbNormal">@color/second</item> <item name="colorButtonNormal">@color/second</item> ...> 

    У меня был такой же пробьм и решил.

     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> ... <!-- Active thumb color & Active track color(30% transparency) --> <item name="colorControlActivated">@color/theme</item> <!-- Inactive thumb color --> <item name="colorSwitchThumbNormal">@color/grey300</item> <!-- Inactive track color(30% transparency) --> <item name="android:colorForeground">@color/grey600</item> ... </style> 

    Я читаю код совместимости приложений и понимаю его.

    android.support.v7.internal.widget.TintManager.java

     private ColorStateList getSwitchTrackColorStateList() { if (mSwitchTrackStateList == null) { final int[][] states = new int[3][]; final int[] colors = new int[3]; int i = 0; // Disabled state states[i] = new int[] { -android.R.attr.state_enabled }; colors[i] = getThemeAttrColor(android.R.attr.colorForeground, 0.1f); i++; states[i] = new int[] { android.R.attr.state_checked }; colors[i] = getThemeAttrColor(R.attr.colorControlActivated, 0.3f); i++; // Default enabled state states[i] = new int[0]; colors[i] = getThemeAttrColor(android.R.attr.colorForeground, 0.3f); i++; mSwitchTrackStateList = new ColorStateList(states, colors); } return mSwitchTrackStateList; } 

    Ниже представлен способ AppCompat для изменения цвета дорожки и большого пальца программным способом для определенного коммутатора . В этом примере я жестко закодировал thumbColor на красный. В идеале вы должны установить цвет через второй параметр метода.

    Обратите внимание, что когда переключатель установлен, отображается пульсация. Цвет пульсации не будет изменен кодом ниже.

     public static void setSwitchColor(SwitchCompat v) { // thumb color of your choice int thumbColor = Color.RED; // trackColor is the thumbColor with 30% transparency (77) int trackColor = Color.argb(77, Color.red(thumbColor), Color.green(thumbColor), Color.blue(thumbColor)); // setting the thumb color DrawableCompat.setTintList(v.getThumbDrawable(), new ColorStateList( new int[][]{ new int[]{android.R.attr.state_checked}, new int[]{} }, new int[]{ thumbColor, Color.WHITE })); // setting the track color DrawableCompat.setTintList(v.getTrackDrawable(), new ColorStateList( new int[][]{ new int[]{android.R.attr.state_checked}, new int[]{} }, new int[]{ trackColor, Color.parseColor("#4D000000") // full black with 30% transparency (4D) })); }