Android中如何动态的调整Dialog的背景深暗

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

在 Android 开发中,当你使用 Dialog 或 DialogFragment 时,可以通过设置 Window 的背景变暗来突出它的可见性。这个效果是通过 backgroundDimAmount 属性来控制的。

那我们怎么动态设置backgroundDimAmount呢?

DialogFragment

假设你正在使用 DialogFragment,那么你可以在 onCreateDialogonViewCreated 方法中配置 Dialog 的窗口属性。

DialogFragment 中设置 backgroundDimAmount

public class MyDialogFragment extends DialogFragment {@Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {Dialog dialog = super.onCreateDialog(savedInstanceState);Window window = dialog.getWindow();if (window != null) {WindowManager.LayoutParams layoutParams = window.getAttributes();layoutParams.dimAmount = 0.5f; // 设置dimAmount为0.5,即背景变得半透明window.setAttributes(layoutParams);window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);}return dialog;}// 如果你的DialogFragment使用的是布局文件,需要在onViewCreated中调用上面的代码@Overridepublic void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);Window window = getDialog().getWindow();if (window != null) {WindowManager.LayoutParams layoutParams = window.getAttributes();layoutParams.dimAmount = 0.5f; // 设置dimAmount为0.5,即背景变得半透明window.setAttributes(layoutParams);window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);}}
}
动态调整 dimAmount

如果你需要在应用运行时根据某些条件动态调整 dimAmount,可以通过保存 WindowManager.LayoutParams 并在需要时更新它:

public class MyDialogFragment extends DialogFragment {private WindowManager.LayoutParams layoutParams;@Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {Dialog dialog = super.onCreateDialog(savedInstanceState);Window window = dialog.getWindow();if (window != null) {layoutParams = window.getAttributes();layoutParams.dimAmount = 0.5f; // 初始设置window.setAttributes(layoutParams);window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);}return dialog;}public void updateDimAmount(float dimAmount) {if (layoutParams != null) {layoutParams.dimAmount = dimAmount;if (getDialog() != null && getDialog().getWindow() != null) {getDialog().getWindow().setAttributes(layoutParams);}}}
}

然后你可以通过调用 updateDimAmount 来动态调整 dimAmount

MyDialogFragment dialogFragment = new MyDialogFragment();
dialogFragment.show(getSupportFragmentManager(), "MyDialog");// 动态调整dimAmount
dialogFragment.updateDimAmount(0.8f); // 将dimAmount调整为0.8

这样你就可以在不同情况下动态调整 Dialog 的 backgroundDimAmount 了。

Dialog

Dialog 中设置 backgroundDimAmount

如果你直接使用 Dialog 而不是 DialogFragment,你可以在创建 Dialog 时设置 dimAmount

Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.dialog_layout);
Window window = dialog.getWindow();if (window != null) {WindowManager.LayoutParams layoutParams = window.getAttributes();layoutParams.dimAmount = 0.5f; // 设置dimAmount为0.5,即背景变得半透明window.setAttributes(layoutParams);window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}dialog.show();

静态的方式

静态的方式也就是创建Dialog时直接设置主题theme

<style name="MyDialogTheme" parent="@style/Theme.Design.BottomSheetDialog" ><item name="android:windowIsFloating">false</item><item name="android:backgroundDimAmount">0.5</item><item name="android:backgroundDimEnabled">true</item><item name="android:windowFullscreen">true</item><item name="android:windowContentOverlay">@null</item></style>

需要注意的是,这个backgroundDimAmount的数值🈷️接近1,则背景越黑,如果是1的话就是完全看不到背景


欢迎关注我的公众号AntDream查看更多精彩文章!

AntDream

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/858367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【密码学】分组密码

文章目录 分组密码的模式分组密码与流密码模式明文分组与密文分组 ECB模式ECB定义ECB特点对ECB模式的攻击改变分组顺序攻击 CBC模式CBC定义初始化向量IVCBC特点对CBC模式的攻击对初始向量进行反转攻击填充提示攻击 CFB模式CFB定义对CFB模式的攻击重放攻击 OFB模式OFB定义CFB模式…

05-5.5.3 并查集的进一步优化

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

游戏心理学Day23

游戏中的道德与文化 游戏与道德 道德在汉语中最早可追溯到老子的道德经&#xff0c;老子说道生之&#xff0c;德畜之&#xff0c;物行之&#xff0c;势成之&#xff0c;是以万物莫不遵循而贵德。道之贵&#xff0c;德之贵&#xff0c;夫莫之命&#xff0c;而常于自然。其中&a…

全面分析一下前端框架Angular的来龙去脉,分析angular的技术要点和难点,以及详细的语法和使用规则,底层原理-小白进阶之路

Angular 前端框架全面分析 Angular 是一个由 Google 维护的开源前端框架。它最早在 2010 年发布&#xff0c;最初版本称为 AngularJS。2016 年&#xff0c;团队发布了一个完全重写的版本&#xff0c;称为 Angular 2&#xff0c;之后的版本&#xff08;如 Angular 4、Angular 5…

什么是CSS原子化?

CSS原子化&#xff0c;也被称为功能性CSS或工具类CSS&#xff0c;是一种构建样式表的方法&#xff0c;它将传统CSS中的“多属性-多值”类转变为“单属性-单值”的类。这种方法最主要的特点是提高了样式的可复用性和模块化程度。 CSS原子化的详细说明&#xff1a; 结构和命名 …

【LocalAI】(13):LocalAI最新版本支持Stable diffusion 3,20亿参数图像更加细腻了,可以继续研究下

最新版本v2.17.1 https://github.com/mudler/LocalAI/releases Stable diffusion 3 You can use Stable diffusion 3 by installing the model in the gallery (stable-diffusion-3-medium) or by placing this YAML file in the model folder: Stable Diffusion 3 Medium 正…

PriorityQueue详解(含动画演示)

目录 PriorityQueue详解1、PriorityQueue简介2、PriorityQueue继承体系3、PriorityQueue数据结构PriorityQueue类属性注释完全二叉树、大顶堆、小顶堆的概念☆PriorityQueue是如何利用数组存储小顶堆的&#xff1f;☆利用数组存储完全二叉树的好处&#xff1f; 4、PriorityQueu…

python json反序列化为对象

在Python中&#xff0c;将JSON数据反序列化为对象通常意味着将JSON格式的字符串转换为一个Python的数据结构&#xff08;如列表、字典&#xff09;或者一个自定义的类实例。虽然Python的标准库json模块不提供直接将JSON数据映射到类的实例的功能&#xff0c;但我们可以通过一些…

React AntDesign Layout组件布局刷新页面错乱闪动

大家最近在使用React AntDesign Layout组件布局后刷新页面时&#xff0c;页面布局错乱闪动 经过组件属性的研究才发现&#xff0c;设置 hasSider 为 true 就能解决上面的问题&#xff0c;耽搁了半天的时间&#xff0c;接着踩坑接着加油&#xff01;&#xff01;&#xff01; …

pytorch实现的面部表情识别

一、绪论 1.1 研究背景 面部表情识别 (Facial Expression Recognition ) 在日常工作和生活中&#xff0c;人们情感的表达方式主要有&#xff1a;语言、声音、肢体行为&#xff08;如手势&#xff09;、以及面部表情等。在这些行为方式中&#xff0c;面部表情所携带的表达人类…

QT/QMessageBox/QTimerEvent/使用定时器制作一个闹钟

1.使用定时器制作一个闹钟 代码&#xff1a; widget.cpp: #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), speecher(new QTextToSpeech(this))//给语音对象申请空间 {ui->setup…

SQL找出所有员工当前薪水salary情况

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 有一个薪水表…

Debian Linux安装minikubekubectl

minikube&kubectl minkube用于在本地开发环境中快速搭建一个单节点的Kubernetes集群,还有k3s&#xff0c;k3d&#xff0c;kind都是轻量级的k8skubectl是使用K8s API 与K8s集群的控制面进行通信的命令行工具 这里使用Debian Linux演示&#xff0c;其他系统安装见官网,首先…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇Kerberos委派安全RBCD资源Operators组成员HTLMRelay结合

基于资源的约束委派(RBCD)是在Windows Server 2012中新加入的功能,与传统的约束委派相比,它不再需要域管理员权限去设置相关属性。RBCD把设置委派的权限赋予了机器自身,既机器自己可以决定谁可以被委派来控制我。也就是说机器自身可以直接在自己账户上配置msDS-AllowedToAct…

使用SpringCache实现Redis缓存

目录 一 什么是Spring Cache 二 Spring Cache 各注解作用 ①EnableCaching ②Cacheable ③CachePut ④CacheEvict 三实现步骤 ①导入spring cache依赖和Redis依赖 ②配置Redis连接信息 ③在启动类上加上开启spring cache的注解 ④ 在对应的方法上加上需要的注解 一 什么…

green bamboo snake

green bamboo snake 【竹叶青蛇】 为什么写这个呢&#xff0c;因为回县城听说邻居有人被蛇咬伤&#xff0c;虽然不足以危及生命&#xff0c;严重的送去市里了。 1&#xff09;这种经常都是一动不动&#xff0c;会躲在草地、菜地的菜叶里面、果树上、有时候会到民房大厅休息&a…

什么是网络安全

标题&#xff1a;《网络安全&#xff1a;守护我们的数字世界》 在这个数字时代&#xff0c;网络已经成为了我们生活中不可或缺的一部分。我们用网络进行社交、购物、学习、工作等各种活动。然而&#xff0c;网络世界并非完全安全&#xff0c;网络安全威胁日益增加&#xff0c;…

Qt——系统

目录 概述 事件 鼠标事件 进入、离开事件 按下事件 释放事件 双击事件 移动事件 滚轮事件 按键事件 单个按键 组合按键 定时器 QTimerEvent QTimer 窗口事件 文件 输入输出设备 文件读写类 文件和目录信息类 多线程 常用API 线程安全 互斥锁 条件变量…

python列表常见去重方法

列表去重在python实际运用中&#xff0c;十分常见&#xff0c;也是最基础的重点知识。 1. 使用for循环实现列表去重 此方法去重后&#xff0c;原顺序保持不变。 # for循环实现列表去重 list1 [a, 4, 6, 4, b, hello, hello, world, 9, 9, 4, a] list2 [] for l1 in list1:…

光纤传感器十大品牌

十大光纤传感器品牌-光纤光栅传感器厂家哪家好-Maigoo品牌榜