全面屏手势导航栏适配

news/2025/2/26 11:08:40

背景

识别是否全面屏手势场景,然后识别手势指示条是否显示,然后再获取指示条高度

由于全面屏手势是Android9开始出现的,所以验证需要从Android9的机型测到最新的15看时机效果。

是否全面屏手势判断

java">    public static boolean isGestureNavMode(Context context) {
        if (null == context) {
            return false;
        }
        if (Build.VERSION.SDK_INT >= 31) {
            int navMode = Settings.Secure.getInt(context.getContentResolver(), "hide_navigationbar_enable", 0);
            return navMode == 2 || navMode == 3;
        } else {
            return Settings.Secure.getInt(context.getContentResolver(), "navigation_mode", 0) == 2;
        }
    }

导航栏高度获取

java">public static int getNavBarHeightRes(Context context) {
        int navbarHeight = 0;
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                int resourceId = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
                if (resourceId > 0) {
                    navbarHeight = context.getResources().getDimensionPixelSize(resourceId);
                }
            } else {
                Class<?> clazz = Class.forName("com.android.internal.R$dimen");
                Object obj = clazz.newInstance();
                Field field = clazz.getField("navigation_bar_height");
                int height = Integer.parseInt(field.get(obj).toString());
                navbarHeight = context.getResources().getDimensionPixelSize(height);
            }
        } catch (Exception var5) {
            Log.w(TAG, "getNavBarHeightRes", var5);
        }
        Log.d(TAG, "navbarHeight=" + navbarHeight);
        return navbarHeight;
    }

通过onApplyWindowInsets监听当前的指示条的可见性

java">mRootLayout.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
                @Override
                public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                        boolean isNavBarVisible = insets.isVisible(WindowInsets.Type.navigationBars());
                        Log.d(TAG, isNavBarVisible + "  isNavBarVisible  ");
                    }
                    return insets;
                }
            });

是否显示状态栏(顺带mark)

这里的代码片段是在检查Activity的窗口是否设置了FLAG_KEEP_SCREEN_ON标志。
true:全屏,当前activity没有显示状态栏 false:有状态栏

java">int flag = activity.getWindow().getAttributes().flags;
boolean result = (flag & WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0;

http://www.niftyadmin.cn/n/5868601.html

相关文章

k8s集群3主5从高可用架构(kubeadm方式安装k8s)

关键步骤说明 环境准备阶段 系统更新&#xff1a;所有节点执行yum/apt update确保软件包最新时间同步&#xff1a;通过ntpdate time.windows.com或部署NTP服务器网络规划&#xff1a;明确划分Service网段&#xff08;默认10.96.0.0/12&#xff09;和Pod网段&#xff08;如Flann…

C++STL---<cstddef>

C 头文件 <cstddef> 详解 <cstddef> 是 C 标准库中与 内存布局和指针运算 密切相关的头文件&#xff0c;主要提供基础类型定义和宏操作。 核心类型定义 1. size_t 用途&#xff1a;表示对象大小的无符号整数类型特性&#xff1a; 保证足够大以容纳系统最大可能对…

【AIGC】使用Python实现科大讯飞语音服务ASR转录功能:完整指南

文章目录 讯飞ASR转写API完整指南1. 引言2. 讯飞ASR API介绍3. API参数说明3.1 认证参数3.2 上传参数3.3 查询结果参数3.4 orderResult 字段3.5 Lattice 字段3.6 json_1best 字段3.7 st 字段 4. Python代码实现4.1 生成签名4.2 上传音频文件4.3 获取转写结果4.4 解析转写结果 5…

10. docker nginx官方镜像使用方法

本文介绍docker nginx官方镜像使用方法&#xff0c;因为第一次用&#xff0c;在加上对docker也不是很熟&#xff0c;中间踩了一些坑&#xff0c;为了避免下一次用又踩坑&#xff0c;因此记录如下&#xff0c;也希望能够帮到其它小伙伴。 官方镜像页面&#xff1a;https://hub.d…

23种设计模式之《代理模式(Proxy)》在c#中的应用及理解

程序设计中的主要设计模式通常分为三大类&#xff0c;共23种&#xff1a; 1. 创建型模式&#xff08;Creational Patterns&#xff09; 单例模式&#xff08;Singleton&#xff09;&#xff1a;确保一个类只有一个实例&#xff0c;并提供全局访问点。 工厂方法模式&#xff0…

java面试题(一年工作经验)的心得

看面试题 正常人第一步肯定都会看面试题&#xff0c;我也不例外&#xff0c;在看的过程中&#xff0c;我发现有些文章写的不错&#xff0c;对我帮助不小值得推荐&#xff0c;如下&#xff1a; Java面试题全集&#xff08;上&#xff09; 很多基础的东西&#xff0c;建议先看。…

Vscode无法加载文件,因为在此系统上禁止运行脚本

1.在 vscode 终端执行 get-ExecutionPolicy 如果返回是Restricted&#xff0c;说明是禁止状态。 2.在 vscode 终端执行set-ExecutionPolicy RemoteSigned 爆红说明没有设置成功 3.在 vscode 终端执行Set-ExecutionPolicy -Scope CurrentUser RemoteSigned 然后成功后你再在终…

【Linux探索学习】第三十一弹——线程互斥与同步(下):深入理解确保线程安全的机制

线程互斥与同步&#xff08;上&#xff09;&#xff1a;【Linux探索学习】第三十弹——线程互斥与同步&#xff08;上&#xff09;&#xff1a;深入理解线程保证安全的机制-CSDN博客 Linux探索学习&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?…