当前位置: 首页 > news >正文

Android10: 动态隐藏导航栏和状态栏总结

(1)全屏相关设置

//(1)主题添加
<item name="android:windowFullscreen">true</item>//(2)setContentView之前添加
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);  //(3)任意位置添加flag
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) //隐藏状态栏   
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) //显示状态栏  //(4)通过setsystemUiVisibility添加
int uiOptions = View.SYSTEM_UI_LAYOUT_FLAGS| View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;getWindow().getDecorView().setSystemUiVisibility(uiOptions);getWindow().setStatusBarColor(Color.TRANSPARENT);//透明状态栏
getWindow().setNavigationBarColor(Color.TRANSPARENT);  //透明导航栏

(2)部分属性解析

//默认显示状态栏和导航栏
View.SYSTEM_UI_FLAG_VISIBLE
//低调模式,隐藏不重要的状态栏图标,导航栏中相应的图标都变成了一个小点
View.SYSTEM_UI_FLAG_LOW_PROFILE
//稳定布局,需要配合SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION和SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN使用,同时设置布局的android:fitsSystemWindows属性
View.SYSTEM_UI_FLAG_LAYOUT_STABLE//全屏显示,隐藏状态栏,点击屏幕区域不会出现,需要从状态栏位置下拉才会出现
View.SYSTEM_UI_FLAG_FULLSCREEN
//全屏显示,将布局内容拓展到导航栏和状态栏的后面,状态栏不会被隐藏覆盖,状态栏依然可见,Activity布局部分会被状态栏遮挡
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//隐藏导航栏,点击屏幕任意区域,导航栏将重新出现,并且不会自动消失
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
//将布局内容拓展到导航栏的后面
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION//配合SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN使用,使状态栏和导航栏真正的进入沉浸模式。
//点击屏幕任意区域,不会退出全屏模式,只有用户上下拉状态栏或者导航栏时才会退出——这个属性会导致拉出后状态栏和导航栏不会被自动隐藏
View.SYSTEM_UI_FLAG_IMMERSIVE
//效果跟View.SYSTEM_UI_FLAG_IMMERSIVE一样。但是,它在全屏模式下,用户上下拉状态栏或者导航栏时,这些系统栏只是以半透明的状态显示出来,并且在一定时间后会自动消失
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

(3)不允许上下拉出现状态栏和导航栏需求

View.SYSTEM_UI_FLAG_FULLSCREEN
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

通过以上属性来隐藏状态栏和导航栏,发现上下拉还是会出现状态栏和导航栏,现在的需求是不要出现状态栏和导航栏。

可通过如下方式拦截:

//frameworks/base/services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.javainterface Callbacks {void onSwipeFromTop();void onSwipeFromBottom();void onSwipeFromRight();void onSwipeFromLeft();void onFling(int durationMs);void onDown();void onUpOrCancel();void onMouseHoverAtTop();void onMouseHoverAtBottom();void onMouseLeaveFromEdge();void onDebug();
}private final Callbacks mCallbacks;SystemGesturesPointerEventListener(Context context, Handler handler, Callbacks callbacks) {mContext = checkNull("context", context);mHandler = handler;mCallbacks = checkNull("callbacks", callbacks);onConfigurationChanged();
}public void onPointerEvent(MotionEvent event) {if (mGestureDetector != null && event.isTouchEvent()) {mGestureDetector.onTouchEvent(event);}switch (event.getActionMasked()) {case MotionEvent.ACTION_DOWN:mSwipeFireable = true;mDebugFireable = true;mDownPointers = 0;captureDown(event, 0);if (mMouseHoveringAtEdge) {mMouseHoveringAtEdge = false;mCallbacks.onMouseLeaveFromEdge();}mCallbacks.onDown();break;case MotionEvent.ACTION_POINTER_DOWN:captureDown(event, event.getActionIndex());if (mDebugFireable) {mDebugFireable = event.getPointerCount() < 5;if (!mDebugFireable) {if (DEBUG) Slog.d(TAG, "Firing debug");mCallbacks.onDebug();}}break;case MotionEvent.ACTION_MOVE:if (mSwipeFireable) {final int swipe = detectSwipe(event);mSwipeFireable = swipe == SWIPE_NONE;if (swipe == SWIPE_FROM_TOP) {if (DEBUG) Slog.d(TAG, "Firing onSwipeFromTop");mCallbacks.onSwipeFromTop();} else if (swipe == SWIPE_FROM_BOTTOM) {if (DEBUG) Slog.d(TAG, "Firing onSwipeFromBottom");mCallbacks.onSwipeFromBottom();} else if (swipe == SWIPE_FROM_RIGHT) {if (DEBUG) Slog.d(TAG, "Firing onSwipeFromRight");mCallbacks.onSwipeFromRight();} else if (swipe == SWIPE_FROM_LEFT) {if (DEBUG) Slog.d(TAG, "Firing onSwipeFromLeft");mCallbacks.onSwipeFromLeft();}}break;case MotionEvent.ACTION_HOVER_MOVE:if (event.isFromSource(InputDevice.SOURCE_MOUSE)) {if (!mMouseHoveringAtEdge && event.getY() == 0) {mCallbacks.onMouseHoverAtTop();mMouseHoveringAtEdge = true;} else if (!mMouseHoveringAtEdge && event.getY() >= screenHeight - 1) {mCallbacks.onMouseHoverAtBottom();mMouseHoveringAtEdge = true;} else if (mMouseHoveringAtEdge&& (event.getY() > 0 && event.getY() < screenHeight - 1)) {mCallbacks.onMouseLeaveFromEdge();mMouseHoveringAtEdge = false;}}break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:mSwipeFireable = false;mDebugFireable = false;mCallbacks.onUpOrCancel();break;default:if (DEBUG) Slog.d(TAG, "Ignoring " + event);}}

 可从如上回调函数位置屏蔽相关滑动事件,从而实现不在出现状态栏和导航栏

//frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.javaprivate final SystemGesturesPointerEventListener mSystemGestures;mSystemGestures = new SystemGesturesPointerEventListener(mUiContext, mHandler,new SystemGesturesPointerEventListener.Callbacks() {//从上往下滑触发@Overridepublic void onSwipeFromTop() {//通过包名等判断条件,屏蔽上下滑动事件,从而不出现导航栏和状态栏if(tempStatus()){Slog.i(TAG, "onSwipeFromTop not Status Bar");return;}}//从下往上滑触发@Overridepublic void onSwipeFromBottom() {//通过包名等判断条件,屏蔽上下滑动事件,从而不出现导航栏和状态栏if(tempStatus()){Slog.i(TAG, "onSwipeFromBottom not Navigation Bar");return;}}//从右往左滑触发@Overridepublic void onSwipeFromRight() {}//从左往右滑触发@Overridepublic void onSwipeFromLeft() {}@Overridepublic void onFling(int duration) {}@Overridepublic void onDebug() {}@Overridepublic void onDown() {}@Overridepublic void onUpOrCancel() {}@Overridepublic void onMouseHoverAtTop() {}@Overridepublic void onMouseHoverAtBottom() {}@Overridepublic void onMouseLeaveFromEdge() {}});private boolean tempStatus(){int tempEnable = Settings.Global.getInt(mContext.getContentResolver(), "temp_value", 0);ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);List<ActivityManager.RunningTaskInfo> runningTasks = am.getRunningTasks(1);String topActivityPackage = "";if (runningTasks != null && !runningTasks.isEmpty()) {ActivityManager.RunningTaskInfo taskInfo = runningTasks.get(0);topActivityPackage = taskInfo.topActivity.getPackageName();}Slog.i(TAG, "dxf_tempStatus tempEnable = "+ tempEnable + ", topActivityPackage = " + topActivityPackage);return tempEnable == 1 && "com.xxxx.xxxx".equals(topActivityPackage);}

相关文章:

Android10: 动态隐藏导航栏和状态栏总结

&#xff08;1&#xff09;全屏相关设置 //&#xff08;1&#xff09;主题添加 <item name"android:windowFullscreen">true</item>//&#xff08;2&#xff09;setContentView之前添加 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCRE…...

roop 视频换脸

roop: one click face swap. 只用一张人脸图片&#xff0c;就能完成视频换脸。 项目地址&#xff1a; https://github.com/s0md3v/roopColab 部署&#xff1a; https://github.com/dream80/roop_colab 本文是本地部署的实践记录。 环境基础 OS: Ubuntu 22.04.2 LTSKernel: 5…...

Java类集框架(一)

目录 1.Collection集合接口 2.List 接口 (常用子类 ArrayList ,LinkedList,Vector) 3.Set 集合 接口(常用子类 HashSet LinkedHashSet,TreeSet) 4.集合输出(iterator , Enumeration) 1.Collection集合接口 Collection是集合中最大父接口&#xff0c;在接口中定义了核心的…...

Jsp+Ssh+Mysql实现的简单的企业物资信息管理系统项目源码附带视频指导运行教程

由jspssh&#xff08;springstruts2mysql&#xff09;实现的企业物资信息管理系统&#xff0c;系统功能比较简单&#xff0c;实现了基本的管理员、操作员等用户管理、物品分类管理、物品管理、入库管理、出库管理、库存预警、客户管理、供应商管理等基本功能需要的可以联系我分…...

【Spring】深究SpringBoot自动装配原理

文章目录 前言1、main入口2、SpringBootApplication3、EnableAutoConfiguration4、AutoConfigurationImportSelector4.1、selectImports()4.2、getAutoConfigurationEntry()4.3、getCandidateConfigurations()4.4、loadFactoryNames() 5、META-INF/spring.factories6、总结 前言…...

阿里云负载均衡SLB网络型NLB负载均衡架构性能详解

阿里云网络型负载均衡NLB是阿里云推出的新一代四层负载均衡&#xff0c;支持超高性能和自动弹性能力&#xff0c;单实例可以达到1亿并发连接&#xff0c;帮您轻松应对高并发业务。网络型负载均衡NLB具有超强性能、自动弹性伸缩、高可用、TCPSSL卸载、多场景流量分发和丰富的高级…...

JavaScript学习 -- SM4算法应用实例

SM4算法&#xff0c;也被称为国密算法&#xff0c;是中国公布的一种高效且安全的对称加密算法。在JavaScript中&#xff0c;我们可以通过使用CryptoJS库来实现SM4算法的加密和解密。本篇博客将为您介绍如何在JavaScript中使用SM4算法&#xff0c;并提供一个实际的案例。 首先&…...

【JVM】什么是双亲委派机制

文章目录 1、类加载机制2、双亲委派模型2.1、介绍2.2、为什么需要双亲委派2.3、源码解析 3、破坏双亲委派3.1、介绍3.2、破坏实现3.3、破坏双亲委派的例子 4、线程上下文类加载器 1、类加载机制 类加载阶段分为加载、连接、初始化三个阶段&#xff0c;而加载阶段需要通过类的全…...

网络安全 Day24-select高级用法和多表连接

select高级用法和多表连接 1. select 多子句单表高级实践1.1 select 多子句高级语法1.2 聚合函数1.3 group by 实践1.4 having 筛选1.5 order by 排序1.6 limit 2. 多表连接 1. select 多子句单表高级实践 1.1 select 多子句高级语法 where 和 having 区别是后者是分组后进行…...

JUC并发编程之volatile详解

目录 1. volatile 1.1 volatile关键字的作用 1.1.1 变量可见性 1.1.2 禁止指令重排序 1.2 volatile可见性案例 1.3 volatile非原子性案例 1.4 volatile 禁止重排序 1.5 volatile 日常使用场景 送书活动 1. volatile 在并发编程中&#xff0c;多线程操作共享的变量时&a…...

swing布局详解

1. 布局管理器接口 &#xff08;1&#xff09;说明 布局管理器接口为LayoutManager和LayoutManager2&#xff0c;LayoutManager2是LayoutManager的子类。 &#xff08;2&#xff09;常用方法 方法描述LayoutManageraddLayoutComponent(String name, Component comp) removeL…...

el-table某一列嵌套使用el-popover,使用click触发,导致页面下拉框组件无法触发弹框关闭(解决办法)

在弹框触发的方法里加上document.body.click() 即可 尝试了很多其他的方法都没用&#xff0c;只有这个解决了 完整代码&#xff1a; <el-select change"sourceChange" clearable ><el-optionv-for"option in list1":key"option.code":…...

正泰电力携手图扑:VR 变电站事故追忆反演

VR(Virtual Reality&#xff0c;虚拟现实)技术作为近年来快速发展的一项新技术&#xff0c;具有广泛的应用前景&#xff0c;支持融合人工智能、机器学习、大数据等技术&#xff0c;实现更加智能化、个性化的应用。在电力能源领域&#xff0c;VR 技术在高性能计算机和专有设备支…...

报错 -bash: wget: command not found

1、报错 -bash: wget: command not found 可以重装 wget 工具&#xff1a; 卸载 wget 工具 yum remove wget下载 wget 工具 yum -y install wget最后尝试 wget “url” 又OK了&#xff0c;一般是原来的wget初始化有文件损坏造成的。...

HashMap扩容和Redis中Dict 扩容

扩容时机&#xff1a; Hash Map&#xff1a;要在某个临界点进行扩容处理&#xff0c;该临界点就是HashMap中元素的数量在数值上等于threshold&#xff08;table数组长度*加载因子&#xff09; Dict&#xff1a; 当每次新增键值对的时 , 会检测 负载因子(LoadFactor) , 判断以…...

【Redis】内存数据库Redis进阶(Redis持久化)

目录 分布式缓存 Redis 四大问题Redis 持久化RDB (Redis DataBase)RDB执行时机RDB启动方式——save指令save指令相关配置save指令工作原理save配置自动执行 RDB启动方式——bgsave指令bgsave指令相关配置bgsave指令工作原理 RDB三种启动方式对比RDB特殊启动形式RDB优点与缺点 A…...

在PHP8中检测数据类型-PHP8知识详解

在PHP 8中&#xff0c;可以使用多种方法来检测数据类型。以下是常用的四种方法&#xff1a;使用 gettype() 函数、使用 is_* 系列函数、使用 get_debug_type() 函数、使用 get_class() 函数。 一、使用 gettype() 函数 gettype() 函数返回给定变量的数据类型。例如&#xff1a…...

​​​amoeba实现MySQL读写分离

​​​amoeba实现MySQL读写分离 准备环境&#xff1a;主机A和主机B作主从配置&#xff0c;IP地址为192.168.131.129和192.168.131.130&#xff0c;主机C作为中间件&#xff0c;也就是作为代理服务器&#xff0c;IP地址为192.168.131.136。三台服务器操作系统为RHEL6.4 x86_64,为…...

angr学习-入门篇

前言&#xff1a; 资源链接&#xff1a;GitHub - jakespringer/angr_ctf&#xff08;题库仓库&#xff0c;里面有个讲解angr的PPT&#xff0c;里面有官方的题解很详细&#xff09; GitHub - Hustcw/Angr_Tutorial_For_CTF: angr tutorial for ctf 安装&#xff1a; 关于angr…...

基于java SpringBoot和HTML的博客系统

随着网络技术渗透到社会生活的各个方面&#xff0c;传统的交流方式也面临着变化。互联网是一个非常重要的方向。基于Web技术的网络考试系统可以在全球范围内使用互联网&#xff0c;可以在本地或异地进行通信&#xff0c;大大提高了通信和交换的灵活性。在当今高速发展的互联网时…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...