【Android】常用对话框大全(三)自定义Dialog的三种方式(Theme,PopupWindow,Dialog)

2023-11-02

Android Dialog自定义的方式有很多,例如:Theme、Dialog、PopupWindow、AlertDialog、View等方式。

Android常用对话框系列文章

【Android】常用对话框大全(一)Android Dialog

【Android】常用对话框大全(二)Material Dialog

【Android】常用对话框大全(三)自定义Dialog的三种方式(Theme,PopupWindow,Dialog)

Theme

使用Theme的方式自定义Dialog,应该很少人知道这一方法。如果你希望你的Dialog拥有生命周期,使用此方式定义一个Dialog即可实现一个拥有生命周期的对话框。

使用步骤:

1、创建一个Activity

在这里插入图片描述
2、编写布局文件与样式

3、为创建的Activiity设置一个对话框的主题

<activity android:name=".ThemeDialogActivity"
            android:theme="@style/Theme.Material3.Light.Dialog"></activity>

4、启动对话框

startActivity(Intent(this, ThemeDialogActivity::class.java))

代码效果效果如下:
在这里插入图片描述
使用此方式创建的Dialog,它的表面上是一个普普通通的对话框,实际上是一个Activity的一个界面。

PopupWindow

PopupWindow可用于显示任意视图的弹出窗口。

PopupWindow可在弹出、隐藏的时候使用动画来展示。

PopupWindow是一个浮动容器,出现在当前活动的顶部,鉴于此,使得自定义Dialog的方式又多了一种。

使用步骤:

1、创建一个布局文件

2、紧接着将PopupWindow实例化

val popupWindow = PopupWindow(this)
val inflate = LayoutInflater.from(this).inflate(R.layout.dialog_popupdialog, null, false)
popupWindow.contentView = inflate
// 解决布局无法覆盖屏幕边边的问题
popupWindow.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
// 设置popupWindow宽高
popupWindow.width = ViewGroup.LayoutParams.MATCH_PARENT
popupWindow.height = ViewGroup.LayoutParams.MATCH_PARENT
// 设置点击外部是否隐藏
popupWindow.isOutsideTouchable = true
// 点击返回按钮隐藏
popupWindow.isFocusable = true
// 解决状态栏不被阴影布局覆盖问题
popupWindow.isClippingEnabled = false
// 设置显示的位置
popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0)

代码效果如下:

在这里插入图片描述
PopupWindow应该也和上面的Theme一样,比较少人使用这两种方式来进行自定义Dialog,因为他们相较于第三种来说稍微复杂一点,而且组件的事件都需要自己重新去编写,这样一来也会耗时不少。

PopupWindow的其他属性可参考:Android Developers —— PopupWindow

Dialog

在Android中,有许多对话框都是基于Dialog实现,如AlertDialogMaterialAlertDialogBuilder等。

使用步骤:

1、创建一个布局文件

2、将Dialog进行实例化并将其展示出来

val dialog = android.app.Dialog(this)
val inflate = LayoutInflater.from(this).inflate(R.layout.dialog_viewpage, null, false)
// 设置Dialog的内容
dialog.setContentView(inflate)
dialog.show()

代码效果如下:
在这里插入图片描述
Android的AlertDialogMaterialAlertDialogBuilder一般已经能够满足大家的日常需求了,如果需要在这三种方式中选一种方式进行自定义,最简单便捷、性能最好的应该就属使用Dialog来进行自定义。


点击下载源码

参考文献:
1、PopUpWindow使用详解
2、Android Developers —— Dialog
3、Android Developers —— PopupWindow

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Android】常用对话框大全(三)自定义Dialog的三种方式(Theme,PopupWindow,Dialog) 的相关文章

随机推荐

  • 发现一个好用的MySQL数据库管理工具

    免费在线MySQL数据库管理工具 平台地址 http open yesapi cn 一 管理自己的MySQL数据库 如果自己已经有一个MySQL数据库 那么可以直接配置到小白开放平台 就可以实现在线数据库管理了 首先 注册成功后 进入 设置
  • 七种寻址方式

    文章目录 1 立即寻址方式 2 直接寻址方式 3 寄存器寻址方式 4 寄存器间接寻址方式 5 寄存器相对寻址方式 6 基址加变址寻址方式 7 相对基址加变址寻址方式 七种寻址方式总结 寻址方式就是处理器根据指令中给出的地址信息来寻找有效地址
  • Exception in thread "main" java.net.BindException: Address already in use: NET_Bind

    在Java开发Socket中 可能会出现以下信息 Exception in thread main java net BindException Address already in use NET Bind 这是由于端口被占用了 解决的办
  • C++入门(1)简单变量和数据类型

    C 入门 1 简单变量和数据类型 最近在看Larry Ullman Andreas Signer 写的 写给大家看的C 书 做了一些笔记跟大家分享 希望会有所帮助 输入输出头文件 include
  • 编程教育已经走在全球化的路上

    据格物斯坦小坦克所知 在我国 现在仍有很多人觉得编程可有可无 无关考试升学 无关未来与就业 但在国外 编程教育早早便进入校园了 他们对编程的重视程度远超出我们的想象 在国外 少儿编程教育发展程度非常高 全球很多发达国家在基础教育中设立了编程
  • python读取excel生成柱状图

    可以使用 Python 的第三方库来读取 Excel 文件 比如 pandas openpyxl 等 这些库可以方便地将 Excel 中的数据读取出来并存储到一个数据框中 pandas 中的数据结构 然后使用 matplotlib 库来生成
  • 数组16--矩阵中的路径

    数组16 矩阵中的路径 jz65 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 请设计一个函数 用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径 路径可以从矩阵中的任意一个格子开始 每一步可以在矩阵中向左 向右 向
  • git分支管理

    git分支管理 1 主分支 Master 主分支 默认不会在该分支上进行开发 只会将稳定没有bug的代码合并到该分支上 2 开发分支 Develop 主要的开发分支 在master分支的基础上创建而来 该分支主要是保持最新的代码 用于测试
  • PHP制作验证码

    学习PHP 它的函数库太强大了 就觉得很神奇 创建验证码也是很有意思 记录一下吧
  • 【数据结构】顺序表---C语言版(数据结构开篇小菜,全网最详细!小白看一遍就学会!!!)

    文章目录 一 前言 1 什么是数据结构 二 顺序表的概念 线性表 1 什么是线性表 2 顺序表与数组的区别 三 顺序表详解 静态顺序表 动态顺序表 创建动态顺序表 接口1 定义结构体SL 接口2 初始化结构体 SLInit 接口3 检查结构
  • 我也谈谈闭包

    我也谈谈闭包 今天第一次在实际运用中遇到闭包的问题 我要给几个视频video增加鼠标悬停自动播放的功能 刚开始时 我只有一个video 代码如下 HTML li li
  • Matlab学习笔记(1)--Matlab基础矩阵运算学习

    最近接触并学习了Matlab 充分感受到了Matlab的强大 正所谓好记忆不如烂笔头 所以在此写一下学习笔记 以便后续温习 因为Matlab是一个十分重实践的软件 所以学习笔记我打算不按照常规写法来进行 而是通过作者在学习中做的练习题来进行
  • webpack5 学习(三)—— 管理资源:加载 images

    在 webpack 5 中 可以使用内置的 Asset Modules 来处理图像资源 webpack config js 修改webpack config js const path require path module exports
  • SoapUI工具---webservice接口(带图详细步骤)

    目录 首先 找一个接口 1 WEB服务 2 WSDL 界面 3 getMobileCodeInfo界面 SoapUI工具调用 1 打开界面 2 添加接口 3 执行接口 4 创建测试用例 5 添加断言 6 运行结果 编辑 首先 找一个接口 1
  • VS2010+opencv msvcprtd.lib(MSVCP90D.dll) : error LNK2005 error LNK2019等错误

    VS 2010 Opencv 遇到了msvcprtd lib MSVCP90D dll error LNK2005 error LNK 2019等多个错误 刚开始没注意 以为是opencv的库添加的有问题 仔细检查了之后发现库添加的没有问题
  • 人工智能学习(五)人工智能三巨头

    他们分别是杰弗里 辛顿 Geoffrey Hinton 约书亚 本吉奥 Yoshua Bengio 和扬 勒丘恩 Yann LeCun 这三个人通常被大众称为 深度学习三巨头 为什么要介绍他们呢 因为人工智能如今能够发展地如此迅猛 他们几个
  • 注意今晚停机更新

    注意今晚停机更新 LOL将在6月13日凌晨1点开始全区停机维护 请注意 6月13日0点将关闭排位赛入口 不会影响正在进行中的排位赛 发布13 12版本 预计停机时间为1 00 12 00 对于在停机期间结束的活动 其实际结束时间也将提前至停
  • MFC快速入门

    1 新建 MFC 2 直接进入框图界面 资源文件 rc Dialog 3 给控件添加消息处理函数 选中控件 右键 添加事件处理程序 跳转函数 写函数 4 在消息处理函数中添加自定义功能 在我们使用任意一种方法添加了消息处理函数以后 都只能得
  • unity3D 《见缝插针》--得分显示、结束动画、以及游戏的重置

    一 得分显示 1 首先在scene新建一个Text的UI组件 它在Canvas面板下 2 进行缩放 3 为Canvas添加脚本 代码如下 public static int scoreValue public Text scoreText
  • 【Android】常用对话框大全(三)自定义Dialog的三种方式(Theme,PopupWindow,Dialog)

    Android Dialog自定义的方式有很多 例如 Theme Dialog PopupWindow AlertDialog View等方式 Android常用对话框系列文章 Android 常用对话框大全 一 Android Dialo