自定义Android LoadingDialog:保持沉浸式效果的实现
142 浏览量
更新于2024-09-02
收藏 114KB PDF 举报
"这篇文章主要探讨了如何在Android中创建一个加载loading对话框,同时保持界面的沉浸式效果不受影响。作者提供了自定义Dialog的实例代码,以实现对话框弹出时不退出沉浸式状态。"
在Android开发中,当应用程序执行耗时操作时,通常会显示一个loading对话框来提示用户程序正在后台运行。然而,标准的对话框在显示时会获取焦点,这可能会导致界面失去沉浸式(即隐藏状态栏和导航栏)的效果。为了保持沉浸式体验,开发者需要自定义加载对话框。
文章首先介绍了问题的背景:在沉浸式状态下,当普通对话框弹出时,它会强制界面退出沉浸式模式,显示状态栏和导航栏。为了解决这个问题,作者提出了一种自定义`LoadingDialog`的方法。
`LoadingDialog`的实现包括以下几个关键步骤:
1. 继承Dialog类:创建一个新的`LoadingDialog`类,继承自`Dialog`,这样可以利用Dialog的基础功能并进行扩展。
2. 禁止获取焦点:在`show()`方法之前,设置窗口标志`FLAG_NOT_FOCUSABLE`,以防止对话框获取焦点并影响沉浸式状态。代码如下:
```java
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
```
3. 设置沉浸式UI选项:如果设备支持API 19及以上版本(KitKat),应用系统UI的隐藏和稳定布局标志,以保持沉浸式效果。这些标志包括`SYSTEM_UI_FLAG_LAYOUT_STABLE`, `SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION`, `SYSTEM_UI_FLAG_HIDE_NAVIGATION`, `SYSTEM_UI_FLAG_IMMERSIVE_STICKY`, `SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN` 和 `SYSTEM_UI_FLAG_FULLSCREEN`。代码如下:
```java
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);
```
4. 取消禁止获取焦点:在`show()`方法之后,取消设置的禁止获取焦点的标志,以便对话框在显示完毕后可以正常与用户交互。代码如下:
```java
// 在show之后取消禁止获取焦点属性
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
```
通过上述步骤,`LoadingDialog`可以在弹出时保持界面的沉浸式效果,用户可以看到加载指示器,而不会被导航栏或状态栏的出现打断。这种方法对于提供更好的用户体验非常有帮助,特别是在设计现代、简洁的应用界面时。开发者可以根据需要自定义对话框的样式和内容,如加载动画、文字提示等,以适应不同的应用场景。
2023-06-03 上传
2024-10-30 上传
193 浏览量
126 浏览量
634 浏览量
2023-07-15 上传
weixin_38688956
- 粉丝: 4
- 资源: 967
最新资源
- OnlineConverter for onliner-crx插件
- jazmimukhtar.github.io
- 初级java笔试题-awesome-stars:我的GitHub星星精选列表
- arduinomega2560_driver.zip
- python-ternary:带有matplotlib的python三元绘图库
- 在家:预测AT家庭组的销售收入
- 实现简单的缓存功能的类库
- 不同销售业务的需用用人才标准
- Royal-Parks-Half-Marathon:该网站将宣布2021年皇家公园半程马拉松
- SoundWave:动态显示声波:rocket:
- Debuger.zip
- nodejs-express-猫鼬书
- XX战略模式研讨报告
- Payfirma-Woocommerce-Plugin:带V2 API的Payfirma Woocommerce插件
- brig:在ipfs上使用git之类的界面和基于Web的UI进行文件同步
- java笔试题算法-aho-corasick:DannyYoo在Java中实现的Aho-Corasick算法,几乎没有改进