Android"沉浸式"体验
2016-04-25 10:58
513 查看
首先声明一下这个叫法应该是不对的,Translucent翻译过来的是半透明效果,不是IOS的那种什么沉浸式
其实这个也没啥好说的,不管你是android粉还是IOS粉,在日常玩机的过程中,都见过这种界面效果
注意图片中的红色部分,相对于传统app的黑色状态栏,这种类型app的布局是一直延伸到状态栏上
第一种需求实现方式
在android5.0以上,官方已经提供了透明化系统状态栏的功能支持,就是将colorPrimary与colorParimaryDark设置成一致就行了
但是在android4.4上面,实现方式略有不同,它是在透明模式下使用fitsSystemWindows将contentview移至到状态栏的下方,最后在这个空出来的地方手动添加一层view覆盖上去,达到效果
这段代码应该很好理解
第二种需求实现方式
这把我们先说4.4上如何实现。其实刚才在实现第一种需求的过程中,已经做了状态栏全透明处理,只是不要移位加层并着色即可,这里不多说
android5.0上是将decorview整体变成全屏模式,并且将状态栏设置成全透明即可
这样,你的app就已经基本上达到了“沉浸式”的要求,是不是很简单。
1. 概念
首先要明确1个概念,在android上,“沉浸式”叫沉浸式全屏模式以及
透明化系统状态栏
其实这个也没啥好说的,不管你是android粉还是IOS粉,在日常玩机的过程中,都见过这种界面效果
注意图片中的红色部分,相对于传统app的黑色状态栏,这种类型app的布局是一直延伸到状态栏上
2.实现方式
强调一下,“沉浸式”仅仅支持在不低于android4.4的设备上运行,并不向下兼容。并且由于谷歌在android5.0上推出了Material Design,所以4.4跟5+实现方式并不完全一样第一种需求实现方式
在android5.0以上,官方已经提供了透明化系统状态栏的功能支持,就是将colorPrimary与colorParimaryDark设置成一致就行了
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
但是在android4.4上面,实现方式略有不同,它是在透明模式下使用fitsSystemWindows将contentview移至到状态栏的下方,最后在这个空出来的地方手动添加一层view覆盖上去,达到效果
if (Build.VERSION.SDK_INT==Build.VERSION_CODES.KITKAT) { //将状态栏设置成全透明 int bits=WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; if ((params.flags & bits)==0) { params.flags |= bits; //如果是取消全透明,params.flags &= ~bits; window.setAttributes(params); } //设置contentview为fitsSystemWindows ViewGroup viewGroup= (ViewGroup) findViewById(android.R.id.content); viewGroup.getChildAt(0).setFitsSystemWindows(true); //给statusbar着色 View view=new View(this); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(this))); view.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); viewGroup.addView(view); } else if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) { window.setStatusBarColor(getResources().getColor(R.color.colorPrimary)); }
这段代码应该很好理解
第二种需求实现方式
这把我们先说4.4上如何实现。其实刚才在实现第一种需求的过程中,已经做了状态栏全透明处理,只是不要移位加层并着色即可,这里不多说
android5.0上是将decorview整体变成全屏模式,并且将状态栏设置成全透明即可
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) { window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); window.setStatusBarColor(Color.TRANSPARENT); findViewById(R.id.toolbar).setBackgroundColor(Color.TRANSPARENT); }
这样,你的app就已经基本上达到了“沉浸式”的要求,是不是很简单。
3.深坑
我个人开发中写IM的过程中,遇到一个场景:底部edittext要想被软键盘弹起,contentview必须加上fitSystemWindows才能正常。第一种场景倒是没有问题,第二种场景应该怎么做呢?相关文章推荐
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- android 屏幕底部出现菜单
- Android 属性动画(Property Animation) 完全解析 (下)
- android bitmap的内存分配和优化
- android bitmap的内存分配和优化
- android bitmap的内存分配和优化
- Android 属性动画(Property Animation) 完全解析 (上)
- Android_按两次返回键退出程序和长按返回键退出程序
- android View动画
- android 页面切换
- AndroidStudio经常遇到的问题解决方案
- android 学习准备
- 查看Android ADT 版本
- android内存分析
- Android性能优化
- Android 为操作加音效,加声音。提高用户交互,增加粘性,可以选择声音的添加
- Android 烦人的坐标原点
- android Native堆
- android Native堆
- android Native堆