无法更改开关颜色
Unable to change switch color
我正在寻找仅将此颜色应用于所有开关的方法。但默认情况下,它采用 colorAccent
而不是此主题进行切换。
设备:棉花糖。
布局:
<Switch
android:id="@+id/soundSwitch"
style="@style/SwitchStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginBottom="@dimen/large_space"
android:layout_marginRight="@dimen/medium_space"
android:layout_marginTop="@dimen/large_space"
android:checked="true"
/>
样式-v21:
<style name="SwitchStyle" parent="Theme.AppCompat.Light">
<!-- active thumb & track color (30% transparency) -->
<item name="android:colorControlActivated">@color/switch_color</item>
<!-- inactive thumb color -->
<item name="colorSwitchThumbNormal">#f1f1f1</item>
<!-- inactive track color (30% transparency) -->
<item name="android:colorForeground">#42221f1f</item>
</style>
我做错了什么?
将此添加到 style.xml 以获得开关样式。
<style name="SwitchThemeOverlay" parent="">
<!-- active thumb & track color (30% transparency) -->
<item name="colorControlActivated">#00c853</item>
<!-- inactive thumb color -->
<item name="colorSwitchThumbNormal">#CC0000</item>
<!-- inactive track color (30% transparency) -->
<item name="android:colorForeground">#666666
</item>
</style>
并在您的xml中使用
<android.support.v7.widget.SwitchCompat
android:id="@+id/switch_desc"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@color/colorPrimaryDark"
android:padding="5dp"
android:checked="false"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:theme="@style/SwitchThemeOverlay"
android:layout_marginLeft="10dp"
android:text="Description"/>
也许,您可以尝试使用 android.support.v7.widget.SwitchCompat
代替 Switch
和 android:theme=@style/SwitchStyle
代替 style="@style/SwitchStyle"
您将 样式 和 主题 混合在一起。
这些属性是主题属性,因此在主题覆盖中一起定义它们:
res/values/styles.xml(不是值-v21)
<style name="ThemeOverlay.MySwitch" parent="">
<item name="android:colorControlActivated">@color/switch_color</item>
<item name="android:colorSwitchThumbNormal">#f1f1f1</item>
<item name="android:colorForeground">#42221f1f</item>
</style>
<style name="ThemeOverlay.MySwitchCompat" parent="">
<item name="colorControlActivated">@color/switch_color</item>
<item name="colorSwitchThumbNormal">#f1f1f1</item>
<item name="android:colorForeground">#42221f1f</item>
</style>
然后在 switch 上应用这个主题覆盖:
res/layout/layout.xml
<Switch
android:theme="@style/ThemeOverlay.MySwitch"/>
<androidx.appcompat.widget.SwitchCompat
android:theme="@style/ThemeOverlay.MySwitchCompat"/>
选择两个变体之一:
Switch
从 API 21 开始可用,所有主题属性都以 android:
为前缀
SwitchCompat
在 AndroidX AppCompat 库中可用,一些主题属性没有前缀(确保你知道是哪个)。
我正在寻找仅将此颜色应用于所有开关的方法。但默认情况下,它采用 colorAccent
而不是此主题进行切换。
设备:棉花糖。
布局:
<Switch
android:id="@+id/soundSwitch"
style="@style/SwitchStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginBottom="@dimen/large_space"
android:layout_marginRight="@dimen/medium_space"
android:layout_marginTop="@dimen/large_space"
android:checked="true"
/>
样式-v21:
<style name="SwitchStyle" parent="Theme.AppCompat.Light">
<!-- active thumb & track color (30% transparency) -->
<item name="android:colorControlActivated">@color/switch_color</item>
<!-- inactive thumb color -->
<item name="colorSwitchThumbNormal">#f1f1f1</item>
<!-- inactive track color (30% transparency) -->
<item name="android:colorForeground">#42221f1f</item>
</style>
我做错了什么?
将此添加到 style.xml 以获得开关样式。
<style name="SwitchThemeOverlay" parent="">
<!-- active thumb & track color (30% transparency) -->
<item name="colorControlActivated">#00c853</item>
<!-- inactive thumb color -->
<item name="colorSwitchThumbNormal">#CC0000</item>
<!-- inactive track color (30% transparency) -->
<item name="android:colorForeground">#666666
</item>
</style>
并在您的xml中使用
<android.support.v7.widget.SwitchCompat
android:id="@+id/switch_desc"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@color/colorPrimaryDark"
android:padding="5dp"
android:checked="false"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:theme="@style/SwitchThemeOverlay"
android:layout_marginLeft="10dp"
android:text="Description"/>
也许,您可以尝试使用 android.support.v7.widget.SwitchCompat
代替 Switch
和 android:theme=@style/SwitchStyle
代替 style="@style/SwitchStyle"
您将 样式 和 主题 混合在一起。
这些属性是主题属性,因此在主题覆盖中一起定义它们:
res/values/styles.xml(不是值-v21)
<style name="ThemeOverlay.MySwitch" parent="">
<item name="android:colorControlActivated">@color/switch_color</item>
<item name="android:colorSwitchThumbNormal">#f1f1f1</item>
<item name="android:colorForeground">#42221f1f</item>
</style>
<style name="ThemeOverlay.MySwitchCompat" parent="">
<item name="colorControlActivated">@color/switch_color</item>
<item name="colorSwitchThumbNormal">#f1f1f1</item>
<item name="android:colorForeground">#42221f1f</item>
</style>
然后在 switch 上应用这个主题覆盖:
res/layout/layout.xml
<Switch
android:theme="@style/ThemeOverlay.MySwitch"/>
<androidx.appcompat.widget.SwitchCompat
android:theme="@style/ThemeOverlay.MySwitchCompat"/>
选择两个变体之一:
Switch
从 API 21 开始可用,所有主题属性都以android:
为前缀
SwitchCompat
在 AndroidX AppCompat 库中可用,一些主题属性没有前缀(确保你知道是哪个)。