如何设置Android Switch的样式?


121

默认情况下,API 14中引入的switch小部件的样式为holo主题。我想将其样式略有不同,出于品牌原因更改其颜色和形状。如何做到这一点?我知道这是有可能的,因为我已经看到默认ICS和三星的touchwiz主题之间的区别

在此处输入图片说明

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

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

Answers:


258

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

<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>

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

停用的版本(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>

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

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


1
非常详细的感谢,让我的拇指的一部分移出轨道的9补丁滑块图像特别有用,因为我无法弄清楚它们的操作方式。(默认的滑块将尖的边缘
位移

2
<item android:state_checked =“ true”>还有另外一种状态,当开关处于“ on”状态时,它可以更改轨道图像。因此,如果您想在“开” /“关”上更改曲目,请使用此状态。
narangrajeev81

1
如何设置拇指的文字颜色?我在任何地方都找不到它:(
pojomx 2014年

1
@ pojomx。您是否找到了解决textcolor问题的方法-即打开/关闭文本颜色?我面临着同样的问题,停留在同一点。
Smeet 2015年

更改文本颜色=> android:switchTextAppearance =“ @ style / mySwitchTextSyle”
Andrew

50

这是Janusz的精彩详细答复。但是,仅是为了吸引访问该页面的人员,更简单的方法是来自Android Asset Studio的http://android-holo-colors.com/(无效链接)链接

有关所有工具的完整说明,请访问AndroidOnRocks.com(现在离线)

但是,我强烈建议大家阅读Janusz的回复,因为这样可以使理解更加清晰。使用该工具快速完成任务


6
节省大量时间。一键绘制9个补丁,状态列表可绘制对象等!
史蒂夫·

这个答案非常方便,我希望看到它被发布为“通过自定义颜色轻松创建android holo控件的工具”和可接受答案的问题。开发人员需要这个。
Rachael

我敢肯定那会是个很棒的工具...可悲的是,所有链接都死了
Razvan_TK9692

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 drawables来自定义开关轨迹和开关拇指,如下图所示。有关更多信息,请参见http://www.zoftino.com/android-switch-button-and-custom-switch-examples

自定义开关轨迹和拇指


1

另一种更容易的方法是使用形状而不是9块。它已经在这里解释了:https : //stackoverflow.com/a/24725831/512011


idk,在kishu27的答案中提到的工具,更改颜色的速度要快得多,因为它可以为您创建所有文件。我想您是否想自定义颜色以外的形状,尽管这可能更快。
JStephen,2015年

该工具确实很棒,尽管,坦率地说,我不喜欢这样的想法:如果您只想更改某些东西的颜色,则需要生成一堆图像。另外,如果您使用形状,则关闭/打开开关位置可以具有不同的颜色。
netpork 2015年

是的,如果您像我一样优柔寡断,不断改变颜色,直到找到喜欢的颜色,那么速度会更快,对我而言,幸运的是,还有其他人负责挑选颜色:)
JStephen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.