Android 界面横竖屏切换 顶部状态栏(标题栏)显示与隐藏

最近在做视频开发功能,要知道市面大多数视频界面,都有横竖屏切换的功能,所以我在功能开发完后,就遇到界面【系统状态栏】问题,竖屏时系统状态栏是显示的,切换横屏时需要全屏播放显示的,但是问题也来了,全横屏时系统状态栏也显示了,这样就并没真正做到全屏效果了,先看效果图:


图一(竖屏界面默认状态):

Android 界面横竖屏切换 顶部状态栏(标题栏)显示与隐藏_第1张图片



图二 (横屏显示状态):


      Android 界面横竖屏切换 顶部状态栏(标题栏)显示与隐藏_第2张图片




可以看到切换横屏后,系统状态栏里的、时间、Wifi、电量并没有隐藏,而需求是要把系统状态栏去掉,那咋整呢?

你可能会说在 AndroidManifest.xml里 加入 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 又或者在 Activity 的 onCreate() 里 添加如下代码:


requestWindowFeature(Window.FEATURE_NO_TITLE);      
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

上面两种方式倒是可以实现全屏方式,但是只能做到永久全屏模式,而我需要的效果是,竖屏时系统状态栏显示,横屏切换时全屏时,系统状态栏就得隐藏消失掉,这样就只能动态去设置系统状态栏, 解决方式也很简单粗暴,看下面代码:


1,横屏切换加此代码:

//获得 WindowManager.LayoutParams 属性对象
WindowManager.LayoutParams lp = getWindow().getAttributes();
//直接对它flags变量操作   LayoutParams.FLAG_FULLSCREEN 表示设置全屏

lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
//设置属性
getWindow().setAttributes(lp);
//意思大致就是  允许窗口扩展到屏幕之外
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);


2,竖屏切换代码

//获得 WindowManager.LayoutParams 属性对象
WindowManager.LayoutParams lp2 = getWindow().getAttributes();
//LayoutParams.FLAG_FULLSCREEN 强制屏幕状态条栏弹出
lp2.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
//设置属性
getWindow().setAttributes(lp2);
//不允许窗口扩展到屏幕之外  clear掉了

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);



解决效果图:


Android 界面横竖屏切换 顶部状态栏(标题栏)显示与隐藏_第3张图片





Android 界面横竖屏切换 顶部状态栏(标题栏)显示与隐藏_第4张图片



是吧,可以看到上面图 完美的 Solve 了,随便你如何来回切换,效果是实现了,至于其他问题有待后续研究。。!


WindowManager.LayoutParams 参数说明:
地址:http://my.oschina.net/u/1781028/blog/307263






你可能感兴趣的:(android,开发)