123

API 14 中引入的开关小部件默认采用全息主题样式。我想把它的风格稍微改变一下,为了品牌的原因改变它的颜色和形状。怎么办?我知道这一定是可能的,因为我看到了默认 ICS 和三星的 touchwiz 主题之间的区别

在此处输入图像描述

我假设我需要一些状态可绘制对象,并且我在http://developer.android.com/reference/android/R.styleable.html中看到了一些带有 Switch_thumb 和 Switch_track 的样式,这些样式看起来像我可能想要的. 我只是不知道如何使用它们。

如果这有所作为,我正在使用 ActionbarSherlock。当然,只有运行 API v14 或更高版本的设备才能使用开关。

4

4 回答 4

261

您可以定义用于背景的可绘制对象和切换器部分,如下所示:

<Switch
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:thumb="@drawable/switch_thumb"
    android:track="@drawable/switch_bg" />

现在您需要创建一个选择器来定义切换器可绘制对象的不同状态。这里是来自 Android 来源的副本:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/switch_thumb_disabled_holo_light" />
    <item android:state_pressed="true"  android:drawable="@drawable/switch_thumb_pressed_holo_light" />
    <item android:state_checked="true"  android:drawable="@drawable/switch_thumb_activated_holo_light" />
    <item                               android:drawable="@drawable/switch_thumb_holo_light" />
</selector>

这定义了拇指可绘制对象,即在背景上移动的图像。滑块使用了四个 Ninepatch图像:

停用的版本(Android 正在使用的 xhdpi 版本)停用的版本
按下的滑块:按下的滑块
激活的滑块(开启状态):激活的滑块
默认版本(关闭状态):在此处输入图像描述

在以下选择器中定义了三种不同的背景状态:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/switch_bg_disabled_holo_dark" />
    <item android:state_focused="true"  android:drawable="@drawable/switch_bg_focused_holo_dark" />
    <item                               android:drawable="@drawable/switch_bg_holo_dark" />
</selector>

停用版本:停用的版本
重点版本:重点版
和默认版本:默认版本

要拥有样式开关,只需创建这两个选择器,将它们设置为您的开关视图,然后将七个图像更改为您想要的样式。

于 2012-04-13T12:27:03.430 回答
50

这是 Janusz 的一个很棒的详细回复。但只是为了那些来到这个页面寻求答案的人,更简单的方法是从 Android Asset Studio 链接的http://android-holo-colors.com/(死链接)

AndroidOnRocks.com上对所有工具都有很好的描述(网站现在离线)

但是,我强烈建议大家阅读 Janusz 的回复,因为它会使理解更加清晰。使用该工具快速完成工作

于 2013-02-21T22:38:46.860 回答
3

您可以通过设置不同的颜色属性来自定义材质样式。例如自定义应用程序主题

<style name="CustomAppTheme" parent="Theme.AppCompat">
    <item name="android:textColorPrimaryDisableOnly">#00838f</item>
    <item name="colorAccent">#e91e63</item>
</style>

自定义开关主题

<style name="MySwitch" parent="@style/Widget.AppCompat.CompoundButton.Switch">
    <item name="android:textColorPrimaryDisableOnly">#b71c1c</item>
    <item name="android:colorControlActivated">#1b5e20</item>
    <item name="android:colorForeground">#f57f17</item>
    <item name="android:textAppearance">@style/TextAppearance.AppCompat</item>
</style>

您可以通过定义 xml 可绘制对象来自定义切换轨道和切换拇指,如下图所示。欲了解更多信息http://www.zoftino.com/android-switch-button-and-custom-switch-examples

自定义切换轨道和拇指

于 2017-09-19T08:18:06.393 回答
1

另一种更简单的方法是使用形状而不是 9-patches。这里已经解释过了: https ://stackoverflow.com/a/24725831/512011

于 2015-10-08T09:14:58.653 回答