Android实现底部对话框BottomDialog弹出实例代码
发布时间 - 2026-01-11 00:15:47 点击率:次最近项目上需要实现一个底部对话框,要实现这样的功能其实很简单,先看代码:
private void show1() {
Dialog bottomDialog = new Dialog(this, R.style.BottomDialog);
View contentView = LayoutInflater.from(this).inflate(R.layout.dialog_content_normal, null);
bottomDialog.setContentView(contentView);
ViewGroup.LayoutParams layoutParams = contentView.getLayoutParams();
layoutParams.width = getResources().getDisplayMetrics().widthPixels;
contentView.setLayoutParams(layoutParams);
bottomDialog.getWindow().setGravity(Gravity.BOTTOM);
bottomDialog.getWindow().setWindowAnimations(R.style.BottomDialog_Animation);
bottomDialog.show();
}
对话框的样式style:
<style name="BottomDialog" parent="@style/Base.V7.Theme.AppCompat.Light.Dialog"> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> </style>
在对话框中的按钮需要MD风格的波纹效果的话,对话框的style的parent需要设定parent="@style/Base.V7.Theme.AppCompat.Light.Dialog",否则没有效果。同时将对话框所在window的标题去掉。android:windowBackground属性一定要设置成透明,否则自定义形状的对话框背景就是默认的白色了。如果不设置为透明,比如我们通常要设置的圆角对话框就没有效果。
对话框显示时从底部进入,关闭时从底部滑出。动画样式:
<style name="BottomDialog.Animation" parent="Animation.AppCompat.Dialog"> <item name="android:windowEnterAnimation">@anim/translate_dialog_in</item> <item name="android:windowExitAnimation">@anim/translate_dialog_out</item> </style>
tranlate_dialog_in.xml:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="0" android:fromYDelta="100%" android:toXDelta="0" android:toYDelta="0"> </translate>
tranlate_dialog_out.xml:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="100%"> </translate>
实现底部对话框的原理就是修改对话框的内容布局contentView的参数,使它的宽度刚好等于屏幕的宽度,并且设置对话框所在Window的gravity属性为bottom。
需要注意的是,上面代码中需要在调用contentView.getLayoutParams()需要在setContentView方法后,否则获取到的LayoutParams为null,当然也可以自己new一个LayoutParams设置给contentView。
如果是要实现底部圆角对话框,原理也相似,只需要给contentView添加一个圆角的背景shape,并减小contentView的宽度给左右两边留一定的距离,同时给底部设置边距。
private void show2() {
Dialog bottomDialog = new Dialog(this, R.style.BottomDialog);
View contentView = LayoutInflater.from(this).inflate(R.layout.dialog_content_circle, null);
bottomDialog.setContentView(contentView);
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) contentView.getLayoutParams();
params.width = getResources().getDisplayMetrics().widthPixels - DensityUtil.dp2px(this, 16f);
params.bottomMargin = DensityUtil.dp2px(this, 8f);
contentView.setLayoutParams(params);
bottomDialog.getWindow().setGravity(Gravity.BOTTOM);
bottomDialog.getWindow().setWindowAnimations(R.style.BottomDialog_Animation);
bottomDialog.show();
}
源码:BottomDialog_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# dialog底部弹出
# android
# 底部对话框
# bottomdialog
# Android中自定义对话框(Dialog)的实例代码
# Android自定义对话框Dialog的简单实现
# 详解Android 全局弹出对话框SYSTEM_ALERT_WINDOW权限
# Android实现点击AlertDialog上按钮时不关闭对话框的方法
# 实例详解Android自定义ProgressDialog进度条对话框的实现
# Android 之BottomsheetDialogFragment仿抖音评论底部弹出对话框效果(实
# Android实现退出界面弹出提示对话框
# Android中AlertDialog各种对话框的用法实例详解
# Android仿QQ消息提示实现弹出式对话框
# Android对话框使用方法详解
# 对话框
# 圆角
# 的是
# 只需
# 就没
# 自定义
# 要给
# 设置为
# 使它
# 需要注意
# 先看
# 大家多多
# 设置成
# 其实很简单
# 滑出
# 对话框中
# BOTTOM
# BottomDialog_Animation
# show
# setGravity
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
公司网站制作价格怎么算,公司办个官网需要多少钱?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
Bootstrap CSS布局之列表
Python文件异常处理策略_健壮性说明【指导】
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
IOS倒计时设置UIButton标题title的抖动问题
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
Android使用GridView实现日历的简单功能
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
javascript中对象的定义、使用以及对象和原型链操作小结
C++时间戳转换成日期时间的步骤和示例代码
如何快速建站并高效导出源代码?
如何在万网利用已有域名快速建站?
如何用已有域名快速搭建网站?
Laravel怎么在Blade中安全地输出原始HTML内容
香港服务器网站卡顿?如何解决网络延迟与负载问题?
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Laravel怎么调用外部API_Laravel Http Client客户端使用
网站页面设计需要考虑到这些问题
Python数据仓库与ETL构建实战_Airflow调度流程详解
如何快速生成ASP一键建站模板并优化安全性?
高端企业智能建站程序:SEO优化与响应式模板定制开发
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
图册素材网站设计制作软件,图册的导出方式有几种?
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
如何在云主机上快速搭建多站点网站?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
网站图片在线制作软件,怎么在图片上做链接?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
高端网站建设与定制开发一站式解决方案 中企动力
如何实现建站之星域名转发设置?
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何在阿里云服务器自主搭建网站?
如何快速搭建高效简练网站?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
详解阿里云nginx服务器多站点的配置
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何在云主机快速搭建网站站点?
网站优化排名时,需要考虑哪些问题呢?
如何用腾讯建站主机快速创建免费网站?
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧

