android状态栏颜色设置颜色
① Android的supportV7中默认按钮的颜色设置
我们知道,在styles.xml文件里面可以设置主题,在主题中设置的一些颜色,将会应用到默认的AppCompat控件上,从而很简单的就可以保持整个APP在UI上的一致性。下面是一个例子:
至于各种控件是如何应用这些颜色设置的,则需要经过更多的尝试了。
比如Activity导航栏默认的图标颜色是colorControlNormal,导航栏的底色是colorPrimary,沉浸式状态栏默认的颜色是colorPrimaryDark;
比如FAB的默认颜色是colorAccent;
比如AppCompatCheckBox默认的选中状态的颜色是colorAccent,而默认的未选择状态的颜色的colorControlNormal;
比如AppCompatSpinner的下拉图标的默认颜色也是colorControlNormal。
......
其实涉及到的主要的就是下面这几个参数:
那么问题来了,如果你使用蓝色的沉浸式状态栏,导航栏上的图标则使用白色,那在这个Activity中使用AppCompatCheckBox的时候,未选择状态就也是白色的,此时如果在白色的背景色下,用户就看不出这是个AppCompatCheckBox了。这时候怎么办?如下图(图中使用的是AppCompatSpinner):
其实很简单,在这个AppCompatCheckBox上使用app:theme="@style/MyCheckBox",然后在styles.xml中添加新的
但是需要注意的是,这样可能引起控件其他默认属性的变化,比如CheckBox的textSize会变成1(不使用app:theme的时候和APP的默认字体大小一样)。
android:theme和app:popupTheme的作用,以及在android 3.0以下不起作用问题的解决
② android导航栏与状态栏颜色及透明度
首先创建一个空项目,如下图
可以看到状态栏是白字黑背景, 导航栏也是白图标黑背景
嘿嘿, 我们先把状态栏隐藏掉,在添加一个ImageView, 让ImageView做背景(方便查看)
样子如下:
将状态栏和导航栏设置透明, 找到 Manifest.xml 文件, 在主题样式中修改
android:statusBarColor 设置状态栏背景色
android:navigationBarColor 同上
android:windowLightStatusBar 设置状态栏文字色, true为深色, false为白色
android:windowLightNavigationBar 同上
android:windowTranslucentStatus 设置状态栏半透明状态, true为半透明, false为不透明
android:windowTranslucentNavigation 同上
最后两个半透明状态下面没用, 可自己尝试看效果
效果图如下:
可以看到导航栏与状态栏并没有透明,原因是默认不能占用状态栏空间与导航栏空间,根布局背景为白色,所有这里显示白色
可以通过设置 getWindow().getDecorView().setSystemUiVisibility() 来适配
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 适配状态栏空间
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 适配导航栏空间
效果如下:
③ 关于 Android 中的各种 Bar 和“透明状态栏”的一些知识
本文主要讲解关于Android中沉浸式状态栏、全屏模式与状态栏、ActionBar、ToolBar之间的区别与使用方法,旨在帮助读者理解如何适配Android状态栏。
请注意,状态栏与这些所谓的“Bar”在概念上完全不同。状态栏,即status bar,是Android设备顶部显示时间、通知等信息的区域。在Android设计中,早期注重功能性,TitleBar(标题栏)仅仅用于显示页面标题。随着Android 3.0的发布,引入了注重美感的Holo样式,此时TitleBar被ActionBar取代,功能扩展至更多方面。
在Android 3.0之前,TitleBar仅用于显示页面标题。而在Android 3.0之后的API 11版本,为了提升美观性,引入了具有更多功能的ActionBar。简而言之,ActionBar在本质上与TitleBar类似,它们均不是传统的控件形式,而是嵌套在DecorView中,可通过window.setFeatureInt方法进行功能和样式的修改。
随着Android 5.0的推出,ToolBar被引入,成为一个独立控件,为开发者提供了更多的灵活性。在Android 4.1及以上的版本中,ActionBar是标准配置,但其使用仅限于4.1以上。在Android 4.4之前,状态栏始终为黑色,而从4.4开始,引入了windowTranslucentStatus特性,使状态栏颜色可调,这种现象被国内开发者称为“沉浸式状态栏”,实际上这一说法并不准确。
所谓的“沉浸式状态栏”实际上是状态栏透明模式,即内容UI全屏,状态栏透明。在Android 4.4中,通过windowTranslucentStatus可以将状态栏颜色调整为其他颜色,以适应不同的应用需求。然而,在谷歌官方文档中,并未提及“沉浸式状态栏”这一概念,仅提及了全屏模式和状态栏颜色调整。
在实现透明状态栏模式时,可以采用以下步骤:首先设置内容布局全屏,使内容覆盖顶部状态栏;接着将状态栏设为透明;最后,应用属性以确保布局全屏显示。需要注意的是,状态栏颜色的修改在Android 5.0后支持,而在Android 4.4之前则不允许。
为了适应全屏模式,开发者应考虑使用页面布局,并通过DecorView来获取根布局,进而控制状态栏显示与布局的全屏扩展。在Android 6.0中,还支持修改状态栏文字颜色。
通过本文内容,您将对Android中状态栏、ActionBar、ToolBar的使用以及如何适配状态栏有更深入的理解。如需进一步学习,可参考相关文章或访问个人公众号获取更多资源。