【问题标题】:Unable to change switch color无法更改开关颜色
【发布时间】:2018-04-12 15:27:51
【问题描述】:

我正在寻找仅将此颜色应用于所有开关。但默认情况下,它使用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>

我做错了什么?

【问题讨论】:

  • 如果你挣扎并失败了,你可能会通过覆盖 colorAccent &lt;item name="colorAccent"&gt;your color&lt;/item&gt;

标签: android android-styles android-switch


【解决方案1】:

将此添加到 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"/>

【讨论】:

  • 我将“Style”更改为“ThemeOverlay”以更好地描述正在发生的事情。
【解决方案2】:

或许,您可以尝试使用android.support.v7.widget.SwitchCompat 代替Switchandroid:theme=@style/SwitchStyle 代替style="@style/SwitchStyle"

【讨论】:

  • Kozrev,你能解释一下为什么我们需要使用 android:theme 而不是 style 吗?我试图理解它并没有成功
【解决方案3】:

您将样式主题混合在一起。

这些属性是主题属性,所以在主题叠加层中一起定义它们:

res/values/styles.xml(不是 values-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>

然后在开关上应用这个主题叠加:

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 库中可用,一些主题属性没有前缀(确保你知道哪个)。

【讨论】:

  • 嗨,我知道这是一个旧答案,但你能解释一下你说 “你正在混合样式和主题。这些属性是主题属性,所以定义它们一起在主题叠加中 我现在也有同样的问题,尝试通过 style 属性将主题应用于 Switch 组件但没有任何改变,而通过 theme 属性应用主题有效吗?你能解释一下你的意思吗?
  • 查看 Android Developers channel on YouTube,查找来自 Google I/O 或其他会议的视频,其中有 Nick Butcher 或 Chris Banes 解释该主题。
  • 谢谢。但是您给了我一个包含 很多 视频的链接,我无法观看所有视频来回答我的问题 :(
  • 我的印象是您希望了解该主题,了解为什么它以某种方式运行。我不能给你一个简明、令人满意的答案,适合 Stack Overflow 的评论。证明这一点的事实是,多年来有关该主题的多次演讲。从youtu.be/sNSlDfaNq-0 开始,按照自己的节奏完整观看,看看是否对你有帮助。
  • 谢谢我看完了。讲师说:*“coloraccent 是一个主题属性,所以不要尝试在布局中使用它,因为不会发生任何事情”但是他根本没有提到样式属性,我想我很难理解 *theme 属性如何作为 textAppearancetheme style 等在视图膨胀时被处理。我开始看youtube.com/watch?v=TIHXGwRTMWI,希望它能帮助我理解。如果您有其他资源可以帮助我,我会很高兴。谢谢!
猜你喜欢
  • 2012-06-30
  • 2020-10-20
  • 2021-06-09
  • 2016-07-25
  • 2017-08-24
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
相关资源
最近更新 更多