Fragment切换中适配"沉浸式状态栏"
2018-03-18 16:28
323 查看
传送门:
fitSystemWindow属性的作用
http://blog.csdn.net/wangxp423/article/details/79564244
fitSystemWindow属性实战
http://blog.csdn.net/wangxp423/article/details/79566465
适配“沉浸式”状态栏
http://blog.csdn.net/wangxp423/article/details/79596329
前三篇我们讲解实现“沉浸式”状态栏相关的一些代码。本篇我们讲述在Fragment切换的时候适配”沉浸式”状态栏
此篇中的顶部的标题栏是写在Fragment的布局中的。而不是写在外部Activity的布局中。如果写在外部的话就更简单了。
下图是5.0系统适配效果
我们可以效果是可以的,适配规则也是按照第三篇中的规则进行适配的。
fragment中代码就不贴了,前三个图片就是线性布局中一个标题栏一个TextView,第四个就是一个ImageView。
这里在简单说一下:
//本来想以第三篇中的第一种适配方式来写,且标题栏是在fragment中的,以为会比较简单,结果遇到了诸多问题。简单说一下问题吧。
//第一种适配方式修改状态栏颜色,主要配合的是fitSystemWindow属性。他作用于布局文件中的第一个View中,如果后面的View也设置这个属性是无效的。
//用这个属性在Fragment切换的时候有下面弊端,下面简单介绍一下
//1,如果fitSystemWindow设置在Fragment里面的第一个View中,在切换的时候发现只有第一个生效,后面的fragment不生效。
//2,如果从有标题栏切换到无标题栏,即顶端是大图的情况,不需要有fitSystemWindow的属性,即该属性需要是false。(这个我没有试过不知道是否切换设置是否生效,大家可以试一下)
//如果用第一种方案进行适配,最好是标题栏在外部Activity里面,只需要控制标题栏的颜色和显示隐藏,大家有兴趣的可以试一下。
下面上源码在(StatusBar研究)里面,欢迎交流
https://github.com/wangxp423/ViewExercise
个人公众号“Code之旅”
欢迎扫码关注个人公众号“Code之旅”
个人gitHub地址:https://github.com/wangxp423
fitSystemWindow属性的作用
http://blog.csdn.net/wangxp423/article/details/79564244
fitSystemWindow属性实战
http://blog.csdn.net/wangxp423/article/details/79566465
适配“沉浸式”状态栏
http://blog.csdn.net/wangxp423/article/details/79596329
前三篇我们讲解实现“沉浸式”状态栏相关的一些代码。本篇我们讲述在Fragment切换的时候适配”沉浸式”状态栏
一:前提
本篇是在上面三篇的第三篇《适配“沉浸式状“态栏》传送门;在这一篇的基础上的第二种适配方案(顶部添加View,修改View颜色)的基础上进行的。此篇中的顶部的标题栏是写在Fragment的布局中的。而不是写在外部Activity的布局中。如果写在外部的话就更简单了。
二,适配效果图
下图是小米6.0.1系统适配效果下图是5.0系统适配效果
我们可以效果是可以的,适配规则也是按照第三篇中的规则进行适配的。
三,主要部分代码
这一部分主要是fragment切换代码,主要就是切换的时候控制添加View的显示和隐藏,根据标题栏背景色是否是浅色,控制状态栏字体和图标颜色。@OnClick(R.id.fragment_title_blue) public void changeTitleBlue() { setStatusBarPlaceVisible(true); setViewColorStatusBar(false,getResources().getColor(R.color.colorPrimary)); selectFragment(0); } @OnClick(R.id.fragment_title_red) public void changeTitleRed() { setStatusBarPlaceVisible(true); setViewColorStatusBar(false,getResources().getColor(R.color.colorAccent)); selectFragment(1); } @OnClick(R.id.fragment_title_white) public void changeTitleWhite() { setStatusBarPlaceVisible(true); setViewColorStatusBar(true,Color.WHITE); selectFragment(2); } @OnClick(R.id.fragment_title_image) public void changeTitleImage() { setStatusBarPlaceVisible(false); setViewColorStatusBar(false,Color.WHITE); selectFragment(3); }
/** * 根据版本不同 修改添加View的颜色 * 适配白底标题栏(方案二)顶部添加View,改变View颜色 * 适配方案2, 4.4以下的不适配,4.4-6.0修改View颜色为浅灰色,6.0以上修改View颜色为白色,修改状态栏字体颜色 * * @param isLight 标题栏颜色是否为浅色(白色) */ protected void setViewColorStatusBar(boolean isLight, int statusBarPlaceColor) { //6.0+ 小米 魅族 可以直接适配 一般情况下6.0以上都是透明 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M || OsUtil.isMIUI() || OsUtil.isFlyme()) { setStatusBarTextDark(isLight); setStatusBarPlaceColor(statusBarPlaceColor); } else { if (statusBarPlaceColor == Color.WHITE) { statusBarPlaceColor = 0xffcccccc; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //4.4以上修改为浅灰色 setStatusBarPlaceColor(statusBarPlaceColor); } else { //4.4以下不适配 setStatusBarPlaceVisible(false); } } } protected void setStatusBarPlaceVisible(boolean isVisible){ if (isVisible){ mViewStatusBarPlace.setVisibility(View.VISIBLE); } else{ mViewStatusBarPlace.setVisibility(View.GONE); } } protected void setStatusBarPlaceColor(int statusColor) { if (mViewStatusBarPlace != null) { mViewStatusBarPlace.setBackgroundColor(statusColor); } }
fragment中代码就不贴了,前三个图片就是线性布局中一个标题栏一个TextView,第四个就是一个ImageView。
这里在简单说一下:
//本来想以第三篇中的第一种适配方式来写,且标题栏是在fragment中的,以为会比较简单,结果遇到了诸多问题。简单说一下问题吧。
//第一种适配方式修改状态栏颜色,主要配合的是fitSystemWindow属性。他作用于布局文件中的第一个View中,如果后面的View也设置这个属性是无效的。
//用这个属性在Fragment切换的时候有下面弊端,下面简单介绍一下
//1,如果fitSystemWindow设置在Fragment里面的第一个View中,在切换的时候发现只有第一个生效,后面的fragment不生效。
//2,如果从有标题栏切换到无标题栏,即顶端是大图的情况,不需要有fitSystemWindow的属性,即该属性需要是false。(这个我没有试过不知道是否切换设置是否生效,大家可以试一下)
//如果用第一种方案进行适配,最好是标题栏在外部Activity里面,只需要控制标题栏的颜色和显示隐藏,大家有兴趣的可以试一下。
下面上源码在(StatusBar研究)里面,欢迎交流
https://github.com/wangxp423/ViewExercise
个人公众号“Code之旅”
欢迎扫码关注个人公众号“Code之旅”
个人gitHub地址:https://github.com/wangxp423
相关文章推荐
- 【Android】状态栏相关适配(判断MIUI,Flyme,状态栏图标颜色切换,获取状态栏高度,沉浸式状态栏相关等)
- android快速开发框架,集成了底部tab键切换界面、toolbar、沉浸式状态栏、BaseActivity、BaseAdapter、BaseFragment等
- Android沉浸式状态栏适配
- android适配pad和部分手机底部虚拟按键+沉浸式状态栏
- 一个Activity中多个Fragment实现沉浸式状态栏
- Android 沉浸式状态栏实现, 在Activity和Fragment中
- 一个Activity中多个Fragment实现沉浸式状态栏的解决方法
- acvitity和fragment中都可以单独设置的沉浸式状态栏的自定义实现方式(包括白底黑字状态栏)
- Android下的沉浸式状态栏+折叠TitleBar(CoordinatorLayout+CollapsingToolbarLayout)+ViewPager切换实现
- 详解关于MIUI 9沉浸式状态栏的最新适配
- Android 沉浸式状态栏(透明)适配
- 关于MIUI 9沉浸式状态栏的最新适配
- 沉浸式状态栏,终结版,简单方面,适配多种机型,直接调用
- Android沉浸式(透明)状态栏适配
- ViewPager、PagerTabStrip、FragmentPagerStateAdapter实现状态栏切换界面
- Fragment切换 (状态栏一体化)状态栏闪烁问题
- 一个Activity中多个Fragment实现沉浸式状态栏
- RadioButton加Fragment的切换底栏图标大小适配
- 初学者---Android 沉浸式(透明)状态栏适配
- Fragment和Activity两种沉浸式状态栏的实现