Android监听状态栏的显示与隐藏状态栏

Android  2020年9月11日 pm12:09发布4年前 (2020)更新 城堡大人
70 0 0

前言

在项目中有些需要监听SystemUI状态栏)的显示和影藏。

比如视频全屏和非全屏时,需要做一些布局的动态显示,虽然我们可以控制,但还是存在偶尔状态的失控,导致布局显示不对问题。

以下内容参考《笔记3 | 通过onWindowAttributesChangedonSystemUiVisibilityChange监听状态栏页面的隐藏与显示、动态显示与隐藏状态栏》

  • 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都是我这边设置全屏时带的参数。

小结一下,经过多次的测试,这个方法符合我们需求:监听状态栏的影藏和显示。

参考文章

  1. 笔记3 | 通过onWindowAttributesChanged和onSystemUiVisibilityChange监听状态栏页面的隐藏与显示、动态显示与隐藏状态栏

 历史上的今天

  1. 2024: [摘]Android启动时间优化(0条评论)
  2. 2024: Kotlin的基本语法(0条评论)
  3. 2023: OkHttp分析之同步请求(0条评论)
  4. 2022: Socket的简单使用记录(0条评论)
  5. 2019: 梁文道:在铁路上开餐(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

  • 笔友城堡
    笔友城堡 管理员

    实际测试中,如果下拉出状态栏,上面的监听还是有问题的。

    回复

随机推荐

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方法得到。...

蒙田:热爱生命

我对某些词语赋予特殊的含义,拿“度日”来说吧,天色不佳,令人不快的时候,我将“度日”看成是“消磨光阴”。而风和日丽的时候,我却不愿意去“度”,这时候我是在慢慢赏玩,领略美好的时光。坏日子,要飞快“度”过去!好日子,要停下来细细品尝。“度日”和“消磨时光”的常用语令人想起那些“哲人”的习气。他们以为...

梁启超:学问之趣味

我是个主张趣味主义的人,倘若用化学划分“梁启超”这件东西,把里头所含一种元素名叫“趣味”的抽出来,只怕所剩下仅有个零了。我以为凡人必常常生活于趣味之中,生活才有价值。若哭丧着脸挨过几十年,那么,生命便成沙漠,要来何用?中国人见面最喜欢用的一句话:“近来作何消遣?”这句话我听着便讨厌。话里的意思,好像...