Android Dialog 弹出时,隐藏 navigation bar
1、概述
一些场合,要求界面是全屏的,然而在全屏界面下,弹出dialog 又会导致虚拟按键栏重新弹出来,也是比较难受的。(而且查了非常多方法都是不能完美的解决这个问题,要么是压根不能用,要么是会闪一下虚拟栏再隐藏,或者隐藏了再显示回来)
2、解决方式
重载dialog 的 show() 方法。设置为焦点失能,就不会弹出被隐藏过的 虚拟栏了
@Overridepublic void show() {// Set the dialog to not focusable.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);// Show the dialog with NavBar hidden.super.show();}
3、补充
设置全屏界面的方式
<style name="FullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar"><!--需要加上 android: 这个是命名空间, 自定义属性不需要--><item name="android:windowFullscreen">true</item><item name="android:windowContentOverlay">@null</item></style>
4、不足
上文的解决方式确实可以让原本是全屏的界面继续保持全屏,然而实际使用中却遇到了问题(dialog确实是把虚拟按键隐藏了):
- 会有红色报错,提示
- dialog直接变成了点击outside区域不能diss dialog
- dialog变成是可穿透的,点击背景区域下的按钮等元素事件穿透了(大问题)
基于这些问题,其实该方案是不对的
5、正确姿势
经过使用测试,比较正确的使用方式是(工具类在 文章末尾)
5.1、先在activity 里做处理
- activity 设置上文的 FullScreenTheme 主题
- activity 的onCreate 方法里设置 显示navigation 时再隐藏
override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)NavigationBarUtil.hideNavigationBar(window)setContentView(R.layout.activity_main)}
5.2、普通Dialog 处理
fun overHeart(context: Context) {val overHeatDialogBuilder = AlertDialog.Builder(context, android.R.style.Theme_Material_Light_Dialog)overHeatDialogBuilder.setTitle(R.string.operation_result)overHeatDialogBuilder.setMessage(context.getString(R.string.overTemp))overHeatDialogBuilder.setPositiveButton(context.getString(R.string.dialog_comfirm),{ dialogInterface, i -> })val dialog = overHeatDialogBuilder.create()//失能焦点NavigationBarUtil.focusNotAle(dialog!!.window)dialog.show()//显示虚拟栏的时候 隐藏NavigationBarUtil.hideNavigationBar(dialog!!.window)//再清理失能焦点NavigationBarUtil.clearFocusNotAle(dialog!!.window)
}
5.3、自定义 dialog 处理:
override fun show() {NavigationBarUtil.focusNotAle(window)super.show()NavigationBarUtil.hideNavigationBar(window)NavigationBarUtil.clearFocusNotAle(window)}
6、工具类
工具类用java写了,上文代码用了 kotlin
/*** Description:控制虚拟栏* Created by leon on 2018/11/28.*/
public class NavigationBarUtil {/*** 隐藏虚拟栏 ,显示的时候再隐藏掉* @param window*/static public void hideNavigationBar(Window window) {window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);window.getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {@Overridepublic void onSystemUiVisibilityChange(int visibility) {int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE |//布局位于状态栏下方View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |//全屏View.SYSTEM_UI_FLAG_FULLSCREEN |//隐藏导航栏View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;if (Build.VERSION.SDK_INT >= 19) {uiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;} else {uiOptions |= View.SYSTEM_UI_FLAG_LOW_PROFILE;}window.getDecorView().setSystemUiVisibility(uiOptions);}});}/*** dialog 需要全屏的时候用,和clearFocusNotAle() 成对出现* 在show 前调用 focusNotAle show后调用clearFocusNotAle* @param window*/static public void focusNotAle(Window window) {window.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);}/*** dialog 需要全屏的时候用,focusNotAle() 成对出现* 在show 前调用 focusNotAle show后调用clearFocusNotAle* @param window*/static public void clearFocusNotAle(Window window) {window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);}
}
Android dialog 弹出时,保持 隐藏 navigation bar(虚拟栏)_hidenavigationbar-CSDN博客
相关文章:
Android Dialog 弹出时,隐藏 navigation bar
1、概述 一些场合,要求界面是全屏的,然而在全屏界面下,弹出dialog 又会导致虚拟按键栏重新弹出来,也是比较难受的。(而且查了非常多方法都是不能完美的解决这个问题,要么是压根不能用,要么是会闪一下虚拟栏…...
LeetCode(Hot100)——1:两数之和
方法1:暴力求解 利用两次for循环来处理, 外循环确定一个数字, 利用内循环不断求和来判断是否两数之和为target,来进行求解。 public class LeetCode1 {Test//测试方法public void test() {int [] nums{2,7,11,15};int target9;/…...
【Qt】报错error:undefined reference to `vtable for Consumer‘的解决方法
1. 问题原因 在创建完程序后,点击构建,显示编译错误。 错误问题如下: error: undefined reference to vtable在编译输出中查看显示如下: error:undefined reference to vtable for custom2. 原因分析 这个错误通常是因为 C 的虚函数表&am…...
【linux系统】用户功能与权限详细总结
前言 菜某的笔记总结,有错误还请指正。 linux用户的概念与root用户 这么理解:一台电脑有多个操作者,每个操作者只能无限制操作自己文件夹中的东西,其他地方的操作需要给与相应权限才能操作。 root用户:就是最高级的…...
ELK简单介绍二
学习目标 能够部署kibana并连接elasticsearch集群能够通过kibana查看elasticsearch索引信息知道用filebeat收集日志相对于logstash的优点能够安装filebeat能够使用filebeat收集日志并传输给logstash kibana kibana介绍 Kibana是一个开源的可视化平台,可以为ElasticSearch集群…...
video 标签 各种属性及所有事件监听
网页中的video 属性和事件,用于计算观看视频的时长,其他用法备存。 <!-- video 不支持 IE8及以下版本浏览器,支持三种视频格式:MP4,WebM 和 Ogg --><video src"test.mp4" controls width"400…...
TS中断言、转换的应用
1.TS 类型断言定义 把两种能有重叠关系的数据类型进行相互转换的一种 TS 语法,把其中的一种数据类型转换成另外一种数据类型。类型断言和类型转换产生的效果一样,但语法格式不同。 2.TS 类型断言语法格式 A 数据类型的变量 as B 数据类型 。 A 数据类…...
【代码随想录算法训练营-第四天】【链表】24,19, 面试题 02.07,142
24. 两两交换链表中的节点 第一遍-递归-小看了一下题解 思路: 读了两遍题目才理解…相邻节点的交换,这个操作很容易实现,但需要一个tmpNode因为是链表的题目,没开始思考之前先加了dummyNode,还真管用把dummyNode作为…...
代理设计模式
1. 代理模式 1.1 代理模式的原理分析 代理设计模式(Proxy Design Pattern)是一种结构型设计模式,它为其他对象提供一个代理对象,以控制对这个对象的访问。代理模式可以用于实现懒加载、安全访问控制、日志记录等功能。 代理模式…...
ubuntu安装docker及docker常用命令
docker里有三个部分 daemon 镜像 和 容器 我们需要了解的概念 容器 镜像 数据卷 文章目录 docker命令docker镜像相关命令docker容器相关命令数据卷ubuntu安装docker docker命令 #启动,停止,重启docker systemctl start docker systemctl stop docker s…...
STM32-TIM定时器输出比较
目录 一、输出比较简介 二、PWM简介 三、输出比较通道(通用) 四、输出比较通道(高级) 五、输出比较模式 六、PWM基本结构 七、PWM参数计算 八、外设介绍 8.1 舵机 8.2 直流电机及驱动 九、开发步骤 十、输出比较库函数…...
《Easy3d+Qt+VTK》学习
《Easy3dQtVTK》学习-1、编译与配置 一、编译二、配置注 一、编译 1、 资源下载:easy3d giuhub 2、解压缩 3、用qt打开CMakeLists.txt即可 4、点击项目,选择debug或者release,图中3处可自行选择,因为我的qt版本是6,…...
多平台展示预约的服装小程序效果如何
线下实体服装店非常多,主要以同城生意为主,但随着电商经济增长,传统线下自然流量变少,商家们会选择线上入驻平台开店获得更多线上用户,包括自建私域小程序等。 而除了直接卖货外,线上展示预约在服装行业也…...
Gti GUI添加标签
通过Git Gui打开项目,通过菜单打开分支历史,我这里是名为"develop"的分支 选中需要打标签的commit,右键-Create tag即可 但貌似无法删除标签,只能通过git bash,本地标签通过git tag -d tagname,…...
高云GW1NSR-4C开发板M3硬核应用
1.M3硬核IP下载:Embedded M3 Hard Core in GW1NS-4C - 科技 - 广东高云半导体科技股份有限公司 (gowinsemi.com.cn) 特别说明:IDE必须是1.9.9及以后版本,1.9.8会导致编译失败(1.9.8下1.1.3版本IP核可用) 以下根据官方…...
【RTOS学习】模拟实现任务切换 | 寄存器和栈的变化
🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 目录 🏀认识任务切换🏐切换的实质🏐栈中的内容🏐切…...
1.2 轻量级数据交互格式–JSON
对于接口来说,数据交互大部分都是使用的JSON格式,我们这里说的数据,就是我们上一章里讲解HTTP协议的时候,HTTP协议结构里的实体,也就是放在body里。body里存放需要传输的数据,数据是JSON格式,然后通过HTTP协议来传输给接口,接口再以同样的方式给我们返回。理解了这一层…...
charCodeAt() 方法
charCodeAt() 是 JavaScript 中用于获取字符串指定位置字符的 Unicode 编码的方法 语法如下: str.charCodeAt(index) str:要获取字符的字符串。index:要获取的字符在字符串中的索引。返回值是一个表示给定索引处字符 Unicode 编码的整数。…...
Flask中redis的配置与使用
注意点: 在__init__.py中需要将redis_store设置成全局变量,这样方便其他文件导入 一、config.py import logging import os from datetime import timedeltafrom redis import StrictRedisclass Config:# 调试信息DEBUG TrueSECRET_KEY os.urandom(3…...
生产者与消费者模型
初识linux之线程同步与生产者消费者模型_生产者线程和消费者线程-CSDN博客 Linux线程(三)—— 多线程(生产者消费者模型、信号量、线程池)-CSDN博客...
抖音无水印下载终极指南:douyin-downloader完整教程
抖音无水印下载终极指南:douyin-downloader完整教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...
AVPlayer 卡顿、缓冲、加载失败问题根治与监控方案
在 iOS 音视频开发中,AVPlayer 作为系统原生播放器,凭借其稳定性、兼容性和低功耗优势,成为大多数 App 的首选。但在实际落地过程中,卡顿、缓冲异常、加载失败三大问题,却常常成为开发者的“拦路虎”——弱网环境下频繁…...
入库篇:仓库里的货从哪来?——WMS货品来源全解析,物流新人必读
仓库里的货从哪来?——WMS货品来源全解析,物流新人必读 摘要:每天在WMS系统里看到成百上千的库存记录,但你想过没有——这些货品最初是怎么进入系统的?是采购进来的?生产出来的?客户退回来的&am…...
冒险岛游戏编辑器:Harepacker-resurrected 一站式解决方案完整指南
冒险岛游戏编辑器:Harepacker-resurrected 一站式解决方案完整指南 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected 想要个性化定…...
200万像素GC2145摄像头怎么玩?手把手教你用AiPi-Cam-D200开发板快速搭建无线图传
200万像素GC2145摄像头实战指南:零代码玩转AiPi-Cam-D200无线图传 当你拆开AiPi-Cam-D200开发板的包装,看到那块小巧的GC2145摄像头时,可能既兴奋又忐忑——这个看起来像玩具的设备,真能实现专业级的无线图传吗?作为创…...
基于n8n与Puppeteer的LinkedIn求职自动化:从原理到部署实践
1. 项目概述:一个为求职者打造的自动化“侦察兵”如果你正在找工作,或者曾经找过工作,那你一定对“海投”这个词不陌生。每天花几个小时,在各大招聘网站上重复填写个人信息、上传简历、回答同样的问题,最后却往往石沉大…...
AzurLaneAutoScript:碧蓝航线玩家的终极自动刷图解决方案
AzurLaneAutoScript:碧蓝航线玩家的终极自动刷图解决方案 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为…...
5步轻松上手:Grasscutter命令生成器实用指南
5步轻松上手:Grasscutter命令生成器实用指南 【免费下载链接】GrasscutterCommandGenerator Command Generator and Gacha Banner Editor 项目地址: https://gitcode.com/gh_mirrors/gr/GrasscutterCommandGenerator 还在为复杂的原神私服命令而烦恼吗&#…...
5步构建智能建筑通信系统:BACnet4J纯Java协议栈的架构师指南
5步构建智能建筑通信系统:BACnet4J纯Java协议栈的架构师指南 【免费下载链接】BACnet4J BACnet/IP stack written in Java. Forked from http://sourceforge.net/projects/bacnet4j/ 项目地址: https://gitcode.com/gh_mirrors/ba/BACnet4J 在智能建筑和工业…...
Windows文件管理器终极增强:3步实现APK文件原生图标显示
Windows文件管理器终极增强:3步实现APK文件原生图标显示 【免费下载链接】apkshellext Show app icons in windows explorer 项目地址: https://gitcode.com/gh_mirrors/ap/apkshellext 在Windows系统中管理移动应用安装包时,你是否曾为难以区分…...
