如何设置Android Switch的样式?

时间:2012-04-12 05:47:05

标签: android android-theme styling android-styles android-switch

API 14中引入的切换小部件默认使用holo主题设置样式。 我想把它的风格略有不同,为了品牌推广的原因改变它的颜色和形状。怎么会这样呢?我知道它必须是可能的,因为我已经看到默认ICS和三星的touchwiz主题之间的区别

enter image description here

我假设我需要一些状态drawables,并且我在http://developer.android.com/reference/android/R.styleable.html中看到了一些使用Switch_thumb和Switch_track的样式,看起来就像我可能会追求的那样。我只是不知道如何使用它们。

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

4 个答案:

答案 0 :(得分:252)

您可以定义用于背景的drawable,以及切换器部分,如下所示:

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

现在您需要创建一个选择器,用于定义切换器drawable的不同状态。 这里是来自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>

这定义了thumb drawable,即在背景上移动的图像。滑块使用了四个ninepatch图像:

已停用的版本(Android正在使用的xhdpi版本)The deactivated version
按下的滑块:The pressed slider
激活的滑块(开启状态):The activated slider
默认版本(关闭状态):enter image description here

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

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

已停用的版本:The deactivated version
重点版本:The focused version
默认版本为:the default version

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

答案 1 :(得分:50)

这是Janusz的精彩回复。但只是为了那些来到此页面寻求答案的人,更简单的方法是从Android资产工作室链接http://android-holo-colors.com/(死链接)

所有工具的详细说明均位于AndroidOnRocks.com(网站现在离线)

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

答案 2 :(得分: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 drawable来自定义切换轨迹并切换拇指,如下图所示。有关详细信息http://www.zoftino.com/android-switch-button-and-custom-switch-examples

custom switch track and thumb

答案 3 :(得分:1)

替代且更简单的方法是使用形状而不是9个补丁。 这里已经解释过了: https://stackoverflow.com/a/24725831/512011