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

本文介绍了Android中自定义Dialog的三种常见方式:Theme、PopupWindow和Dialog,并通过实例展示了它们的用法和效果。Theme能实现具有生命周期的Dialog,PopupWindow适用于需要浮动窗口效果的情况,而Dialog是最简单的自定义方式,通常能满足大部分需求。文中还提供了代码示例和效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宾有为

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值