Android沉浸式状态栏顶部着色
来源:互联网 发布:药品中标数据库 编辑:程序博客网 时间:2024/04/25 19:46
如今,各大app都将状态栏改变成适合自身app风格的颜色了,颠覆了传统黑白的lowB,状态栏着色,也就是常说的“沉浸式状态栏”。一直觉得这个功能很麻烦很坑爹,网上看资料也只是走马观花,今天闲了下来,准备啃下这块骨头,可是,认真看了几篇文章后,发现这根本不是个骨头,只是我没用心而已,太浮躁了,作为一个靠技术吃饭的,着实应该面壁试过。
“沉浸式状态栏”只有从Android4.4以后的版本,才支持此功能,且谷歌从5.0开始实现了在代码中配置就可以实现这个功能:
private void initToolBarConfig() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0及以上 View decorView = getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; decorView.setSystemUiVisibility(option); getWindow().setStatusBarColor(Color.TRANSPARENT); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4到5.0 WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes(); localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags); } }
这段代码添加到基类Activity中执行段,或者相应Activity的setContentView之前(某些机子这段代码无效果,由于时间原因未做深究)。
但是,如今市场上绝大多数的Android机子都是5.0一下的,所以,必须考虑到4.4-5.0这之间的用户群。解决这个需求有各式各样的方法,为了兼容各个版本的机型和最少的代码量,我们使用最简单的主题配置模式。
思路很简单:1 状态栏透明化,2状态栏着色
第一步:状态栏透明化
需要在values、values-v19、values-v21目录下分别创建相应的主题:
<style name="TranslucentTheme" parent="AppTheme"></style>//values-v19<style name="TranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">false</item></style>//values-v21<style name="TranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">false</item> <item name="android:statusBarColor">@android:color/transparent</item></style>
到AndroidManifest中去给application或者相应的Activity设置主题TranslucentTheme
便是
第一步:状态栏上色
这里有个小问题,是否让组件延伸到状态栏
android:fitsSystemWindows="true"
如果在根布局中添加这个配置,这布局中的第一个组件是不会延伸到状态栏的,如图:
如果不添加,则默认延伸到状态栏。
如果不让逐渐延伸到状态栏,可以个整个Activity设置背景颜色来给状态栏着色,但这可能影响到后期Activity的主题更改,况且,既然是“沉浸式”的,我们最好让第一个组件延伸到状态栏,因为个人觉得,觉得Activity的Style的,往往是第一个组件的,
假设我们的第一个组件是toolBar,直接在toolBar中配置一个paddingTop就好了,至于具体的距离,根据实际而定。
在values、values-v19目录添加如下尺寸:
//values<dimen name="padding_top">0dp</dimen>//values-v19<dimen name="padding_top">25dp</dimen>
然后配置toolBar
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorPrimary" android:navigationIcon="@mipmap/ic_launcher" android:paddingLeft="10dp" android:paddingTop="@dimen/padding_top" app:navigationIcon="@mipmap/ic_launcher" app:title="沉浸式状态栏"/>
PS:如果没有将状态栏事先透明化,当设置toolbar可以被延伸到状态栏的时候,toolBar反而会被状态栏给覆盖。很多同学有时候分不清是否需要在根部局中添加android:fitsSystemWidows="true",分不清的童鞋这样记:true的时候,就是把状态栏当成第一组件,不能被覆盖,false的时候,状态栏就不是第一组件,他可以被覆盖。
更多方法参考:http://www.jianshu.com/p/bae25b5eb867
- Android沉浸式状态栏顶部着色
- 状态栏着色;沉浸式
- Android 透明状态栏 、着色状态栏 (沉浸式状态栏)
- Android沉浸式状态栏 + actionBar渐变 + scrollView顶部伸缩
- Android底部菜单栏、Android沉浸式状态栏(顶部状态栏修改颜色)、自定义标题栏
- android沉浸状态栏和顶部状态栏背景色的设置
- Android 沉浸式状态栏
- android 沉浸式 状态栏
- android 沉浸式状态栏
- android沉浸式状态栏
- Android沉浸式状态栏
- Android 沉浸式状态栏
- android 沉浸式状态栏
- Android沉浸式状态栏
- Android沉浸式状态栏
- Android 沉浸式状态栏
- Android沉浸式状态栏
- android 沉浸式状态栏
- 百度地图 实现检索时不清除定位标注
- A Guide to Debugging Android Binaries
- 阿里云AliYun表格存储(Table Store)相关案例
- python:open/文件操作
- JDWP Unable to get JNI 1.2 environment
- Android沉浸式状态栏顶部着色
- 编程经典书籍
- C++ 移位运算符
- hdu1176--免费馅饼
- Reflect
- Kafka学习笔记(一)
- QT项目间使用extern全局变量
- QT编程中遇到编译中文乱码
- Android好用的PopupWindow 控件