我如何devise一个Android开关?

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

在这里输入图像描述

我假设我需要一些状态drawable,我已经看到了一些样式在http://developer.android.com/reference/android/R.styleable.html与Switch_thumb和Switch_track看起来像我可能会后。 我只是不知道如何去使用它们。

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

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

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

现在您需要创build一个select器来定义可切换切换器的不同状态。 这里来自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版本) 停用的版本
按下的滑块: 按下的滑块
激活的滑块(打开状态): 激活的滑块
默认版本(closures状态): 在这里输入图像描述

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

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

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

要有一个风格的开关只是创build这两个select器,将它们设置到您的交换机视图,然后将七个图像更改为所需的样式。

这是Janusz的一个非常棒的详细答复。 但只是为了寻求答案的人的利益,更简单的方法是从Android Asset Studio链接http://android-holo-colors.com/

所有工具的详细描述在AndroidOnRocks.com (网站现在离线)

不过,我强烈build议大家阅读Janusz的回复,因为这会使理解更清楚。 使用该工具快速地做东西

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

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

 <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

自定义开关轨道和拇指