Я знаю, что мы можем просто добиться этого, используя атрибуты colorControl
, и применить стиль, используя атрибут theme
в представлении. Например,
<style name="MySwitch">
<item name="colorControlNormal">@color/grey</item>
<item name="colorControlActiviated">@color/primaryColor</item>
</style>
<Switch
...
app:theme="@style/MySwitch"/>
Но в этом сценарии нам необходимо применить атрибут theme
ко всем переключателям в действии или в приложении. Вместо этого я хочу применить это ко всей теме приложения. Итак, я пытался добиться того же, используя эти способы, но ничего из этого не сработало.
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColor</item>
<item name="colorPrimaryDark">@color/primaryDarkColor</item>
<item name="colorAccent">@color/secondaryColor</item>
<item name="switchStyle">@style/MySwitch</item>
</style>
Метод 1:
<style name="MySwitch" parent="Widget.AppCompat.CompoundButton.Switch">
<item name="buttonTint">@color/primaryColor</item>
</style>
switch_thumb:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/primaryColor" android:state_checked="true" />
<item android:color="@android:color/darker_gray" />
</selector>
switch_track:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/primaryLightColor" android:state_checked="true" />
<item android:color="@android:color/darker_gray" />
</selector>
Метод 2:
<style name="MySwitch" parent="Widget.AppCompat.CompoundButton.Switch">
<item name="thumbTint">@drawable/switch_thumb</item>
<item name="trackTint">@drawable/switch_track</item>
</style>
Метод 3:
<style name="MySwitch" parent="Widget.AppCompat.CompoundButton.Switch">
<item name="thumb">@drawable/switch_thumb</item>
<item name="track">@drawable/switch_track</item>
</style>
Я пытался найти другие решения, но они не содержат информацию о применении стиля ко всей теме, как я хочу.