我们知道,在styles.xml文件里面可以设置主题,在主题中设置的一些颜色,将会应用到默认的AppCompat控件上,从而很简单的就可以保持整个APP在UI上的一致性。下面是一个例子:

至于各种控件是如何应用这些颜色设置的,则需要经过更多的尝试了。

比如Activity导航栏默认的图标颜色是colorControlNormal,导航栏的底色是colorPrimary,沉浸式状态栏默认的颜色是colorPrimaryDark;

比如FAB的默认颜色是colorAccent;

比如AppCompatCheckBox默认的选中状态的颜色是colorAccent,而默认的未选择状态的颜色的colorControlNormal;

比如AppCompatSpinner的下拉图标的默认颜色也是colorControlNormal。

……

其实涉及到的主要的就是下面这几个参数:

?attr/colorPrimaryitem>

?attr/colorPrimaryDarkitem>

?attr/colorAccentitem>

?attr/colorControlNormalitem>

?attr/colorControlActivateditem>

?attr/colorControlHighlightitem>

?attr/colorButtonNormalitem>

那么问题来了,如果你使用蓝色的沉浸式状态栏,导航栏上的图标则使用白色,那在这个Activity中使用AppCompatCheckBox的时候,未选择状态就也是白色的,此时如果在白色的背景色下,用户就看不出这是个AppCompatCheckBox了。这时候怎么办?如下图(图中使用的是AppCompatSpinner):

d2498378ea677c86cf97cfff05cd9dc8.png

其实很简单,在这个AppCompatCheckBox上使用app:theme=”@style/MyCheckBox”,然后在styles.xml中添加新的

但是需要注意的是,这样可能引起控件其他默认属性的变化,比如CheckBox的textSize会变成1(不使用app:theme的时候和APP的默认字体大小一样)。

cd3265fd5ce243f4a75b9471f1b2476b.jpg

参考:

[android:theme和app:popupTheme的作用,以及在android 3.0以下不起作用问题的解决](http://blog.csdn.net/lovexieyuan520/article/details/48931185)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐