Android 全屏界面切换到非全屏界面的问题
2015-09-08 20:54
597 查看
App一般都有一个启动界面,称为Splash界面。
一般这个界面都是做成全屏的,即隐藏掉系统状态栏,然后再跳转到主界面。
由于主界面是非全屏的,保留着状态栏,这个过程就发生了从全屏界面切换到非全屏界面。
但是在页面切换过程中,会出现先显示页面内容,然后由于状态栏的出现,整个界面下移一个状态栏高度的问题。
如下图所示:
![](http://img.blog.csdn.net/20150908203559495)
当前的网易新闻客户端在5.0的设备上也会出现这样的情况,如下图所示:
![](http://img.blog.csdn.net/20150908203805365)
可以看到很明显的界面下移,特别是这种加了界面滑动切换动画的。
解决方法:
Google之后,找到下面这个链接:
Switching from Full Screen to Non Full Screen Smoothly in Android
然而当在切换之后的activity是继承自AppCompatActivity 或者 ActionBarActivity时是有bug的,ActionBar会上移到状态栏,后来研究了一下,给出我自己的解决方案。
主要的代码如下:
代码不多,也很好理解,先获取到状态栏的高度,然后设置根布局的padding,再设置窗口
该方法在切换之后的那个activity的
处理后的效果如下所示:
![](http://img.blog.csdn.net/20150908204643019)
该程序的代码我上传在github上,可以前去下载查看。
演示demo Github传送门
一般这个界面都是做成全屏的,即隐藏掉系统状态栏,然后再跳转到主界面。
由于主界面是非全屏的,保留着状态栏,这个过程就发生了从全屏界面切换到非全屏界面。
但是在页面切换过程中,会出现先显示页面内容,然后由于状态栏的出现,整个界面下移一个状态栏高度的问题。
如下图所示:
当前的网易新闻客户端在5.0的设备上也会出现这样的情况,如下图所示:
可以看到很明显的界面下移,特别是这种加了界面滑动切换动画的。
解决方法:
Google之后,找到下面这个链接:
Switching from Full Screen to Non Full Screen Smoothly in Android
然而当在切换之后的activity是继承自AppCompatActivity 或者 ActionBarActivity时是有bug的,ActionBar会上移到状态栏,后来研究了一下,给出我自己的解决方案。
主要的代码如下:
private void smoothSwitchScreen() { // 5.0以上修复了此bug if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { ViewGroup rootView = ((ViewGroup) this.findViewById(android.R.id.content)); int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); int statusBarHeight = getResources().getDimensionPixelSize(resourceId); rootView.setPadding(0, statusBarHeight, 0, 0); getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } }
代码不多,也很好理解,先获取到状态栏的高度,然后设置根布局的padding,再设置窗口
FLAG_LAYOUT_IN_SCREEN和
FLAG_LAYOUT_NO_LIMITS属性。
该方法在切换之后的那个activity的
setContentView()方法之前调用,就可以解决全屏切换到非全屏的问题。(必须在此之前)
处理后的效果如下所示:
该程序的代码我上传在github上,可以前去下载查看。
演示demo Github传送门
相关文章推荐
- Android之URI简介
- Android五大存储---(四大组件之一)ContentProvider(字段)
- 监听EditText的变化
- Android 四大组件之一:Service 后台运行
- android学习笔记(一)
- Android中数据存储——ContentProvider存储数据
- Android SQLite数据库应用之Prepared Statement、事务操作
- android广播broadcast详解
- Android的混淆打包原理
- wpa_supplicant子系统分析 android 5.1
- Android组件——ContentProvider
- Android Toast优化--通过自定义布局实现界面美化
- Android系统自带样式(android:theme)
- Android五大存储---SQLite数据库
- Android Api Demos登顶之路(六十)Content-->ClipBoard
- Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解
- android开启远程调试
- [Android Studio 权威教程]多渠道打包和一键完成(全部产品)打包并签名
- Android——广播
- Android使用第三方或者自制字体库(Typespace)