[Android学习整理]之监控并控制SystemUi(状态栏)的显示与隐藏

地址

CSDN 地址:http://blog.csdn.net/xiangyong_1521/article/details/51333437

工作中的一个需求,需要监控并动态控制到SystemUi(状态栏)的显示与隐藏,这是该需求的整理;

目录

  • onWindowAttributesChanged方法
  • OnSystemUiVisibilityChangeListene方法
  • setSystemUiVisibility(int visibility)控制

一、onWindowAttributesChanged方法监听

@Override  
ublic void onWindowAttributesChanged(LayoutParams params) {  
super.onWindowAttributesChanged(params);  
Log.e("Even","屏幕状态"+getWindow().getAttributes().flags);  
if(getWindow().getAttributes().flags==8455424){  
    Log.i("TAG","全屏状态");              
}else if(getWindow().getAttributes().flags==8454400){  
    Log.i("TAG","非全屏状态");             
}

此方法颇为牵强,因为8455424和8454400两个数据并不是权威数值,不能保证通用,而且前期使用的时候发现在正常的生命周期内此方法只会被调用一次,所以得另寻他径!


二、OnSystemUiVisibilityChangeListene方法监听

@Override  
    public void onSystemUiVisibilityChange(int visibility) {  
        if (visibility==View.SYSTEM_UI_FLAG_FULLSCREEN||visibility==View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) {  
            Log.i("TAG","全屏状态======");    
        }else{  
            Log.i("TAG","非全屏状态======");  
        }  
    }

很快找到了此方法,并完美运行,但请记住先打开监听,此监听对我来说价值30分钟。。。

setOnSystemUiVisibilityChangeListener(this);

拓展:SystemUiVisibility(int visibility)方法可传入的实参:

View.SYSTEMUIFLAGVISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。

View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。View.SYSTEMUIFLAGFULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。

View.SYSTEMUIFLAGLAYOUTFULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。

View.SYSTEMUIFLAGLAYOUTHIDENAVIGATION:效果同View.SYSTEMUIFLAGLAYOUTFULLSCREENView.SYSTEMUILAYOUTFLAGS:效果同

View.SYSTEMUIFLAGLAYOUTFULLSCREEN View.SYSTEMUIFLAGHIDENAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。View.SYSTEMUIFLAGLOWPROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。


三、setSystemUiVisibility(int visibility)控制状态栏的显示与隐藏

View类提供了setSystemUiVisibility和getSystemUiVisibility方法,这两个方法实现对状态栏的动态显示或隐藏的操作,以及获取状态栏当前可见性。

测试主要代码
@Override  
    public void onClick(View v)  
    {  
        // TODO Auto-generated method stub  
        switch (v.getId())   
        {  
        case R.id.btn1:  
            //显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)  
            mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);      
            break;  
        case R.id.btn2:  
            //隐藏状态栏,同时Activity会伸展全屏显示  
            mRLayout.setSystemUiVisibility(View.INVISIBLE);  
            break;  
        case R.id.btn3:  
            //Activity全屏显示,且状态栏被隐藏覆盖掉。  
            mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);  
            break;        
        case R.id.btn4:  
            //Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住  
            mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);  
            break;  

        case R.id.btn5:  
            //同mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);  
            mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);  
            break;  
        case R.id.btn6:  
            //同mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);  
            mRLayout.setSystemUiVisibility(View.SYSTEM_UI_LAYOUT_FLAGS);  
            break;  
        case R.id.btn7:  
            //隐藏虚拟按键(导航栏)  
            mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);  
            break;  
        case R.id.btn8:  
            //状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。  
            mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);  
            break;  
        }  
    }

原文发布于微信公众号 - 项勇(xiangy_life)

原文发表时间:2017-09-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

android推荐使用dialogFrament而不是alertDialog

DialogFragment在android 3.0时被引入。是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展...

2015
来自专栏james大数据架构

进度条ProgressBar

拖动滑块改变图片透明度 1.布局 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/...

1765
来自专栏三好码农的三亩自留地

实现Activity滑动退出

很多应用在二级详情页面加入了滑动退出activity的效果,很方便,心血来潮,想着自己也来实现这个效果,就当做练手吧。

812
来自专栏向治洪

滑动开关按钮SlideSwich

iphone上有开关控件,很漂亮,其实android4.0以后也有switch控件,但是只能用在4.0以后的系统中,这就失去了其使用价值,而且我觉得它的界面也...

24110
来自专栏后端之路

Mybatis防范XSS

目前大部分方案对于XSS防范均出现在web页面,比如 http://blog.csdn.net/yansong_8686/article/details/504...

2208
来自专栏Android干货

Android项目实战(二):安卓应用程序退出的三种方法

2595
来自专栏刘晓杰

Glide生命周期管理

3548
来自专栏图像识别与深度学习

《Android》Lesson03-监听器、Toast

1799
来自专栏Android 技术栈

Android 自定义控件之起步代码实践总结

GitHub:https://github.com/youlookwhat/CustomViewStudy

701
来自专栏吴小龙同學

Android MVP 实例

Android MVP 实例 简单的请求天气功能,演示Android MVP是如何使用的 效果预览 image.png 准备 MVP流程 ? 说明: 步骤...

2865

扫码关注云+社区