Android加载loading对话框的功能及实例代码(不退出沉浸式效果)
作者:cczheng 发布时间:2023-05-14 01:25:33
标签:android,加载,loading,对话框
一、自定义Dialog
在沉浸式效果下,当界面弹出对话框时,对话框将获取到焦点,这将导致界面退出沉浸式效果,那么是不是能通过屏蔽对话框获取焦点来达到不退出沉浸式的目的呢。说干就干,我们先来看一下改善后的效果图。
普通对话框弹出效果
LoadingDialog弹出效果
自定义LoadingDialog
public class LoadingDialog extends Dialog {
public LoadingDialog(Context context) {
super(context);
}
public LoadingDialog(Context context, int theme) {
super(context, theme);
}
@Override
public void show() {
//在show之前添加禁止获取焦点
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
super.show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN;
this.getWindow().getDecorView().setSystemUiVisibility(uiOptions);
}
//在show之后取消禁止获取焦点属性,否则会导致dialog无法处理点击
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
}
}
通过上面不难看出,在show之前,我们添加了一个window的FLAG_NOT_FOCUSABLE属性,让window不能获取焦点,在show之后,移除刚刚添加的FLAG_NOT_FOCUSABLE属性,这样就实现了所需要的效果。
二、通过WindowManager的addView方法实现
private WindowManager mwWindowManager;
private FrameLayout mForewarnLayout;
private boolean isShowing = false;
/**显示全屏的加载动画*/
public void alertLoadingDialog(){
if (!isShowing){
mForewarnLayout = (FrameLayout) LayoutInflater.from(getApplicationContext())
.inflate(R.layout.view_loading, null, false);
// 获取window管理对象
mwWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
// 设置布局参数
WindowManager.LayoutParams forewarnLayoutParams = new WindowManager.LayoutParams();
forewarnLayoutParams.type = WindowManager.LayoutParams.TYPE_PHONE; // 设置window TYPE
forewarnLayoutParams.format = PixelFormat.RGBA_8888; // 设置图片格式,效果位背景透明
// 设置Window flag
forewarnLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
forewarnLayoutParams.gravity = Gravity.LEFT | Gravity.TOP; //
// 调整悬浮窗口至左上角,便于调整坐标
// 设置悬浮窗口长宽数据
forewarnLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
forewarnLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
// forewarnLayoutParams.windowAnimations = R.style.anim_view;// 添加进入动画
// 添加布局视图
mwWindowManager.addView(mForewarnLayout, forewarnLayoutParams);
isShowing = true;
}
}
/**取消全屏的加载动画*/
public void dismissTwo() {
if (isShowing) {
mwWindowManager.removeViewImmediate(mForewarnLayout);
isShowing = false;
}
}
addView弹出效果
原理没啥可说的,直接用就完了,需要注意的是,addView和removeView需要一一对应,以上代码已经加了判断处理。还需要添加权限,不然会报错。
uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
这里顺带说一下removeView
和removeViewImmediate
的区别,两个方法设计到线程同步问题,removeViewImmediate()是通知View立刻调用View.onDetachWindow(),这说明这个方法是通过一个监听或者观察者来实现的,因为线程的同步跟异步问题导致activity销毁了,但view还没有被remove完,会导致窗体泄露。
总结
以上所述是小编给大家介绍的Android加载loading对话框的功能及实例代码网站的支持!
来源:https://www.cnblogs.com/cczheng-666/archive/2018/12/08/10087607.html
0
投稿
猜你喜欢
- 本文实例总结了java判断字符串是否为数字的方法。分享给大家供大家参考,具体如下:方法一:用JAVA自带的函数public static b
- 关于这个的例子其实网上已经有这方面的资料了,但是为了文章的完整性,还是觉得有必要讲解.我们先来看一下效果:  
- 前言昨夜同门云集推杯又换盏,今朝茶凉酒寒豪言成笑谈。半生累,尽徒然,碑文完美有谁看,隐居山水之间誓与浮名散。简介今天给大家带来的是支付宝的月
- Spring MVC Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:收集、验证请求参
- 1、volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)&nb
- springboot天生支持使用hibernate validation对参数的优雅校验,如果不使用它,只能对参数挨个进行如下方式的手工校验
- 此方案适用于解决springboot项目运行时动态添加数据源,非静态切换多数据源!!!一、多数据源应用场景:1.配置文件配置多数据源,如默认
- 本文实例为大家分享了Android EventBus普通事件和粘性事件,供大家参考,具体内容如下展示效果 添加EventBus导入依赖com
- 进阶JavaSE-三大接口:Comparator、Comparable和Cloneable。Comparable和Comparator这两个
- 这篇文章主要介绍了Java实现顺序栈原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考
- 本篇随笔将讲解一下Android当中比较常用的两个布局容器--ScrollView和HorizontalScrollView,从字面意义上来
- 什么是Java泛型Java 泛型(generics)是 Jdk 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制, 该机制允许程序
- 参考内容:深入理解Java虚拟机(JVM高级特性与最佳实践) ——周志明老师尚硅谷深入理解JVM教学视频——宋红康老师在本文展开前,读者需要
- 本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正。什么是ZXing.Net
- SpringBoot打jar包遇到的xml文件丢失在pom.xml的build标签中添加如下内容指定资源路径<resources>
- 本文实例讲述了C#自定义处理xml数据类。分享给大家供大家参考。具体分析如下:这个C#类专门用户处理xml数据,可以大大简化xml的操作,类
- 1. 引言在 Java 应用程序中,异常类对于正确捕获和处理错误至关重要。我们常常在编写异常处理的重复代码上花费时间,而不是关注应用程序的其
- 1 前言前文已经讲述了Spring BeanFactory 与 FactoryBean 的区别详情,
- //********************************************************** //******主
- Java原生SPI面向接口编程+策略模式实现建立接口Robotpublic interface Robot { /