前言
在项目中有些需要监听SystemUI(状态栏)的显示和影藏。
比如视频全屏和非全屏时,需要做一些布局的动态显示,虽然我们可以控制,但还是存在偶尔状态的失控,导致布局显示不对问题。
以下内容参考《笔记3 | 通过onWindowAttributesChanged和onSystemUiVisibilityChange监听状态栏页面的隐藏与显示、动态显示与隐藏状态栏》
- onWindowAttributesChanged()监听
- onSystemUiVisibilityChange()监听
onWindowAttributesChanged()监听
在Activity中实现onWindowAttributesChanged()的重写,如下
@Override public void onWindowAttributesChanged(WindowManager.LayoutParams params) { super.onWindowAttributesChanged(params); Log.d(TAG, "onWindowAttributesChanged flags : " + (getWindow().getAttributes().flags)); }
下面运行App时的状态变化
# 运行app时的变化 MainActivity( 9159): onWindowAttributesChanged flags : 0 MainActivity( 9159): onWindowAttributesChanged flags : 65792 MainActivity( 9159): onWindowAttributesChanged flags : 8454400 MainActivity( 9159): onWindowAttributesChanged flags : 8454400 MainActivity( 9159): onWindowAttributesChanged flags : 8454400
这个值不稳定,同时我切换了全屏和非全屏,没有值回调。
小结一下,onWindowAttributesChanged()不适合作为状态栏显示和影藏的监听。
onSystemUiVisibilityChange()监听
onSystemUiVisibilityChange()的监听需要设置布局的监听。
//main_all_layout是根布局的id,这个也可以是其他的id findViewById(R.id.main_all_layout).setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { Log.d(TAG, "onSystemUiVisibilityChange visibility : "+ visibility); if (visibility == (View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)) { Log.d(TAG, "onSystemUiVisibilityChange FULLSCREEN: "); } else { Log.d(TAG, "onSystemUiVisibilityChange NOT FULLSCREEN: "); } } });
上面的View.SYSTEM_UI_FLAG_FULLSCREEN 、 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION都是我这边设置全屏时带的参数。
小结一下,经过多次的测试,这个方法符合我们需求:监听状态栏的影藏和显示。
参考文章
历史上的今天
随机推荐
bat脚本的变量初始化
前言 简单记录一下bat脚本(批处理文件)初始化变量和计数的使用。记录于此,方便自己查阅。正文初始化变量# 初始化count为0set /a count=0# 普通字符set read=BiuMall# 有特殊字符set "read=Biu&Mall"#...
Java基础之—反射2
本文摘抄于《Java基础之—反射(非常重要)》一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获...
书单-白岩松《痛并快乐着》
1”是健康,婚姻、事业、金钱就是后面一个又一个“0”;健康这个“1”在的时候,后面的“0”越多,你的人生越丰富;而前面这个健康的“1”一旦不在了,你后面的“0”再多,人生也只是一个“0”。【笔记:生命是革命的本钱】 背靠着大树,自己却并不是大树。【笔记:那就让自己成为大树吧】&nbs...
音视频学习:AudioRecord的简单使用
前言相关文章摘抄过,但由于不是自己写的或者敲过代码,后面就忘了。本站主要简单的介绍AudioRecord的使用。好记性不如烂笔头正文Android录音的流程:构造一个AudioRecord对象,其中需要的最小录音缓存buffer大小可以通过getMinBufferSize方法得到。...
蒙田:热爱生命
我对某些词语赋予特殊的含义,拿“度日”来说吧,天色不佳,令人不快的时候,我将“度日”看成是“消磨光阴”。而风和日丽的时候,我却不愿意去“度”,这时候我是在慢慢赏玩,领略美好的时光。坏日子,要飞快“度”过去!好日子,要停下来细细品尝。“度日”和“消磨时光”的常用语令人想起那些“哲人”的习气。他们以为...
梁启超:学问之趣味
我是个主张趣味主义的人,倘若用化学划分“梁启超”这件东西,把里头所含一种元素名叫“趣味”的抽出来,只怕所剩下仅有个零了。我以为凡人必常常生活于趣味之中,生活才有价值。若哭丧着脸挨过几十年,那么,生命便成沙漠,要来何用?中国人见面最喜欢用的一句话:“近来作何消遣?”这句话我听着便讨厌。话里的意思,好像...
实际测试中,如果下拉出状态栏,上面的监听还是有问题的。