项目的奇葩需求,需要弹出Dialog不要显示状态栏和导航栏,记录一下解决方法

原文地址:Android 关于Dialog在全屏弹出会显示状态栏和导航栏的问题解决 Stars-one的杂货小窝

说明

Android的原生的Dialog有个问题,如果你的Activity设置为全屏的,然后显示Dialog会出现状态栏和导航栏,这是由于Dialog的焦点引起的问题

本文就是直接列举出了解决方法,原理这里就不细说了

解决方法

1.定义一个MyDialog

这里使用继承方法,定义了一个MyDialog

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Build;
import android.view.View;
import android.view.Window;
import android.view.WindowManager; /**
* 此对话框适合在activity全屏适合弹出
*/
public class MyDialog extends AlertDialog {
protected MyDialog(Context context) {
super(context);
} /**
* 使用方法(可以自行再封装一下)
* @param context
* @param message
* @return
*/
public static MyDialog create(Context context, String message) {
MyDialog mydialog = new MyDialog(context);
mydialog.setTitle("提示");
mydialog.setMessage(message);
mydialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
mydialog.create();
return mydialog;
} @Override
public void show() {
Window window = getWindow();
focusNotAle(window);
super.show();
hideNavigationBar(window);
clearFocusNotAle(window);
} /**
* 隐藏虚拟栏 ,显示的时候再隐藏掉
*
* @param window
*/
public void hideNavigationBar(Window window) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
window.getDecorView().setOnSystemUiVisibilityChangeListener(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
*/
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
*/
public void clearFocusNotAle(Window window) {
window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
}
}

2.使用MyDialog

使用上述定义的Dialog

MyDialog myDialog = MyDialog.create(CallNumberWebviewActivity.this, message);
myDialog.show();

3.Activity设置监听

上述使用之后,如果是点击了对话框,还是会弹出状态栏和导航栏,需要在Activity中设置一下监听器,如下代码:

View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(visibility -> BarUtils.setNavBarVisibility(CallNumberWebviewActivity.this, false));

PS:需要导入依赖

// Android的工具类   https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README-CN.md
implementation 'com.blankj:utilcode:1.30.6'

Android 关于Dialog在全屏弹出会显示状态栏和导航栏的问题解决的更多相关文章

  1. WPF Popup全屏 弹出方法。解决只显示75%的问题。

    WPF Popup全屏 弹出方法.解决只显示75%的问题.   WPF 中 Popup 有一个特点.当Popup的高度超过屏幕的75%的时候,只显示75%的高度. 如下代码: <Window x ...

  2. SpriteBuilder全屏弹出菜单的特殊效果

    但是等一下!这里可以有更多.对于全屏的弹出菜单,你可以在显示弹出全屏菜单时朦胧化背景的level视图. 通过修改SpriteBuilder中的color节点的Color属性(比如修改为black)和O ...

  3. android 自己定义状态栏和导航栏分析与实现

    效果 android 4.4之后,系统是支持自己定义状态栏和导航栏的.举个最典型的样例就是bilibiliclient了(iOS版本号和android版本号能用两套全然不一样符合各自系统的设计ui,良 ...

  4. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

  5. Android开发 - 设置DialogFragment全屏显示

    默认的DialogFragment并不是全屏,但有些需求需要我们将对话框设置为全屏(内容全屏),Android并没有提供直接的API,通过其它不同的方法设置全屏在不同的机型上总有一些诡异的问题,经过测 ...

  6. Android实现横屏以及全屏的小技巧

    分享两个安卓的实用小技巧,那就是横屏和全屏的实现. 首先是横屏的实现 首先是在清单文件中实现 <activity android:name=".MainActivity" a ...

  7. js实现全屏弹框

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. 仿QQ空间根据位置弹出PopupWindow显示更多操作效果

    我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图:       ...

  9. 控制弹出div显示在鼠标附近的位置

    前一个页面: $("#txt_ocname").click(function () { art.dialog.open("/SelPosAll.aspx", { ...

  10. Visual Studio 打开解决方案后 弹出框显示 "正在打开文件..." 迟迟没反应 的解决方法

    Visual Studio 打开解决方案后 弹出框显示 "正在打开文件...",任务管理器的devenv进程又很正常,不会显示"未响应". 而IDE的左下角有个 ...

随机推荐

  1. 俄大神 lopatkin Windows 精简优化系统 - 工具软件

    昨天有个网友邮件我,说是想找个Tiny7 Rev2的ISO操作系统文件,但是我找了下,以前的那些文件有些已经删除了,所以就在网上搜到了俄大神 lopatkin Windows 精简优化系统,特此放到网 ...

  2. P5501 [LnOI2019] 来者不拒,去者不追 题解

    题目链接:来者不拒,去者不追 直接在线查询题目所给的式子是很困难的,我们考虑单点考察贡献.对于一个已经确定的式子,我们发现加入一个数或者删除一个数的贡献如图所示: 如图所示,在原有的序列为 \((1, ...

  3. 小团队如何妙用 JuiceFS

    早些年还在 ENJOY 的时候, 就已经在用 JuiceFS, 并且一路伴随着我工作过的四家小公司, 这玩意对我来说, 已经成了理所应当不可或缺的基础设施, 对于我服务过的小团队而言, 更是实实在在的 ...

  4. Exadata健康检查工具EXAchk

    本文根据MOS文章:Oracle Exadata Database Machine EXAchk (Doc ID 1070954.1)整理关键步骤. 注:通常都会要求使用当前最新可用的EXAchk版本 ...

  5. Centos7部署django+uwsgi+nginx 转载: https://www.cnblogs.com/wztshine/p/16172154.html

    Centos7部署django+uwsgi+nginx   Django + uwsgi + nginx on Centos7 wsgi 介绍 本小节来自 廖雪峰 wsgi 一文 一个Web应用的本质 ...

  6. 【Unity3D】灯光组件Light

    1 灯光简介 ​ 在 Hierarchy 窗口右键,选择 Light,再选择具体的灯光类型,在 Inspector 窗口查看灯光组件如下: Type:灯光类型,主要有:Directional(平行光) ...

  7. Spring boot内嵌tomcat日志配置

    1.说明 最近项目启动有问题需要打印更详细的tomcat日志来做分析,所以用一下. 主要涉及到两类日志配置: access log tomcat log access log捕捉http请求 tomc ...

  8. Linux中作业控制命令

    开门见山,最近.NET劝退师要在linux上写些长时间运行的脚本,获取Azure BlobStorage存储的数据. 记录一下Linux中后台执行作业的命令. Linux作业 作业(Job)是shel ...

  9. 公司服务器建站笔记(三):腾讯云服务器CentOS8.2安装界面环境,使用vnc远程登陆并搭建轻量级Qt服务器

    前言   有些小项目可能只有几个点,几十个点,几百个点,这个时候使用qt的tcp服务器或者mqtt或者websocket等相关服务就可以满足,腾讯云CentOs8.2服务器安装的是没有界面的版本,本篇 ...

  10. python中的泛型使用TypeVar

    引入为什么需要TypeVar PEP484的作者希望借助typing模块引入类型提示,不改动语言的其它部分.通过精巧的元编程技术,让类 支持[]运算不成问题.但是方括号内的T变量必须在某处定义,否则要 ...