AppCompat着色 attributs:
首先,你应该看看 appCompat lib文章那里有和不同的attributs,你可以设置:
colorPrimary: 应用程序的主要品牌颜色。 默认情况下,这是应用到动作栏背景的颜色。
colorPrimaryDark: 主要品牌颜色的深色。 默认情况下,这是应用到状态栏( 通过 statusBarColor ) 和导航栏( 通过 navigationBarColor )的颜色。
colorAccent: 对主要品牌颜色的明亮补充。 默认情况下,这是应用到框架控件( 通过 colorControlActivated )的颜色。
colorControlNormal: 在正常状态下应用到框架控件的颜色。
colorControlActivated: 应用到框架控件的颜色( 例如。 已经选中,switch 处于开启状态。
colorControlHighlight: 用于框架控制高光的颜色( 例如。 涟漪,列表选择器。
colorButtonNormal: 在正常状态下应用到框架按钮的颜色。
colorSwitchThumbNormal: 应用到框架 switch的颜色在它的正常状态下。 ( switch 关闭)
如果所有自定义单个 Activity 开关都是相同的:
使用上一个 attributs,你可以为每个 Activity 定义自己的主题:
@color/my_awesome_color
@color/my_awesome_darker_color
@color/accent
还有:
...
android:name=".MainActivity"
android:theme="@style/Theme.MyActivityTheme">
...
如果你想要不同的自定义开关在一个 Activity:
appcompat部件着色的作品通过拦截任何布局通货膨胀和插入一个特殊tint-aware版本的小部件取而代之( 有关它的内容,请参见 Chris Banes 文章) 你不能自定义风格适用于每个 switch 布局的xml文件。 你必须设置一个自定义上下文,使 switch 具有正确的颜色。
- -
这样做对于 pre-5.0 你需要创建一个上下文,覆盖全球的主题与海关attributs然后通过编程创建开关:ContextThemeWrapper ctw = ContextThemeWrapper(getActivity(), R.style.Color1SwitchStyle);
SwitchCompat sc = new SwitchCompat(ctw)
在 AppCompat v22.1 中,你可以使用以下 XML 将主题应用到 switch 小部件:
...
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:theme="@style/Color1SwitchStyle"/>
你的自定义 switch 主题:
@color/my_awesome_color
- -
在的Android 5.0 上,它看起来像一个新的视图属性: android:theme ( 与清单中的Activity 声明相同) 。 基于另一个 Chris Banes post,后者应该能够直接在布局xml中定义一个自定义主题:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/Color1SwitchStyle"/>
( 我还没有测试我的最后一个解决方案,我将这么做,如果它不起作用,我会编辑我的答案)