我们知道,在stylesxml文件里面可以设置主题,在主题中设置的一些颜色,将会应用到默认的AppCompat控件上,从而很简单的就可以保持整个APP在UI上的一致性。下面是一个例子:
至于各种控件是如何应用这些颜色设置的,则需要经过更多的尝试了。
比如Activity导航栏默认的图标颜色是colorControlNormal,导航栏的底色是colorPrimary,沉浸式状态栏默认的颜色是colorPrimaryDark;
比如FAB的默认颜色是colorAccent;
比如AppCompatCheckBox默认的选中状态的颜色是colorAccent,而默认的未选择状态的颜色的colorControlNormal;
比如AppCompatSpinner的下拉图标的默认颜色也是colorControlNormal。
其实涉及到的主要的就是下面这几个参数:
那么问题来了,如果你使用蓝色的沉浸式状态栏,导航栏上的图标则使用白色,那在这个Activity中使用AppCompatCheckBox的时候,未选择状态就也是白色的,此时如果在白色的背景色下,用户就看不出这是个AppCompatCheckBox了。这时候怎么办?如下图(图中使用的是AppCompatSpinner):
其实很简单,在这个AppCompatCheckBox上使用app:theme="@style/MyCheckBox",然后在stylesxml中添加新的
但是需要注意的是,这样可能引起控件其他默认属性的变化,比如CheckBox的textSize会变成1(不使用app:theme的时候和APP的默认字体大小一样)。
android:theme和app:popupTheme的作用,以及在android 30以下不起作用问题的解决
如果你要对系统定制,这个功能是可以实现的,网上的指导很多。
如果你想通过程序代码实现这个功能,就不要抱有希望了。
你可以查看Android提供了和状态栏相关的权限,也就折叠下拉、隐藏图标那么三项,没有修改颜色的权限。所以,除非你Root,再借助反射,有可能实现这一功能。
这一功能,Android也许会在新的版本中支持,但目前不行。
Android44已经引入了一个新的特性,在应用程序内可以开启透明状态栏和透明虚拟按钮。
android44 以下修改状态栏颜色的方法为:
1、首先会懂得反编译,电脑上要安装java环境和反编译工具。没有的百度搜索下载安装。这里就不多说了。
2、要准备一个framework-resapk放在一边待用,把framework-resapk复制到反编译工具里、反编译framework-resapk后打开res\values\stylesxml。
3、直接搜索以下代码
<style name="TextAppearanceStatusBar" parent="@style/TextAppearance">
你会看见<style name="TextAppearanceStatusBar" parent="@style/TextAppearance">
<item name="textSize">140sp</item>
<item name="textStyle">normal</item>
<item name="textColor">textColorPrimary</item>
</style> 然后修改这一段代码<item name="textColor">textColorPrimary</item> 为 <item name="textColor">#ff000000</item>
000000为颜色代码 想要什么颜色就修改成自己喜欢的颜色就可以了 颜色对照表可以参考 http://www59178com/tools/sejieasp
4、然后回编译。回编译完成后用电脑上的压缩软件打开回编译好的framework-resapk,拖出里面的resourcesarsc替换进事先准备好的framework-resapk里就可以了。然后用复制到内存卡 用RE复制或者移动到system里 修改权限 3 1 0,在移动到framework里覆盖就可以了。关机重启,状态栏的通知内容颜色也变了。
欢迎分享,转载请注明来源:品搜搜测评网