使用设置自定义对话框的大小,位置,样式以及设置在安卓桌面上弹出对话框
第一步:创建对话框
MyDialog mydlg=new MyDialog(context);
第二步:获取对话框的window实例,通过window实例来控制对话框出现的位置,大小和弹出时候的场景
Window dlgwindow=mydlg.getWindow();
设置对话框最终显示位置
dlgWindow.setGravity(Gravity.TOP);
参数可以是Gravity.TOP(顶部),Gravity.BUTTON(底部),Gravity.LEFT(左边),Gravity.RIGHT(右边),Gravity.CENTER(居中)以及它们的组合
设置对话框大小
通过获取屏幕的大小,按照比例的方法设置比较便捷些
首先获得WindowManager实例
WindowManager m = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
WindowManager.LayoutParams p = dlgWindow.getAttributes(); // 获取对话框当前的参数值
p.height = (int) (d.getHeight() * 0.5); // 高度设置为屏幕的0.5
p.width = (int) (d.getWidth() * 1); // 宽度设置为整个屏幕宽度
p.alpha = 0.5f; //设置对话框的透明度
dlgWindow.setAttributes(p);//
设置对话框在桌面上弹出
mydlg.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//这里设置的可以在桌面中显示对话框
实现这一步还需要获取权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
设置window的样式;
通过style文件来设置对话框的样式
以下是一些常用的标签
<item name="android:windowFullscreen">true</item> <!--填充屏幕-->
<item name="android:windowFrame">@null</item> :Dialog的windowFrame框为无
<item name="android:windowIsFloating">true</item>:是否浮现在activity之上
<item name="android:windowIsTranslucent">false</item>:是否半透明
<item name="android:windowNoTitle">true</item>:是否显示title
<item name="android:windowBackground">@drawable/dia_bg</item>:设置dialog的背景
<item name="android:windowBackground">@drawable/selector_dialog_bg</item><!--对话框背景透明-->
<item name="android:backgroundDimEnabled">false</item>: 背景是否模糊显示
<item name="android:windowAnimationStyle">@style/xxx_ani</item>:设置对话框弹出和消失的动画
其它:
//设置点击对话框外部,可以关闭对话框
mydlg.setCanceledOnTouchOutside(true);
//动态设置动画
mydlg.getWindow().setWindowAnimations(R.style.dialog_ani);
PS:对于setType为WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
即系统窗口,是不支持通过getWindow()直接设置动画的,不过,天无绝人之路,可以在对话框里面的view设置动画
eg:
Animation ani=AnimationUtils.loadAnimation(getContext(), R.anim.xxx_anim);
view.setAnimation(ani);
//如何给对话框设置样式
如果是通过继承Dialog来自定义对话框,通过构造函数设置
eg:super(context,R.style.myDialog);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2016-12-17 JQuery.Ajax()的data参数类型
2016-12-17 移动前端开发之viewport的深入理解
2016-12-17 支付宝在线支付接口开发教程
2015-12-17 C#中OpenFileDialog的使用
2015-12-17 使用OLEDB读取不同版本Excel数据的连接字符串设置
2015-12-17 C#初始化数组的三种方式