设置Dialog的显示宽度
来源:互联网 发布:从元数据 编辑:程序博客网 时间:2024/05/16 04:16
在项目中——一个基于 AOSP 的联系人修改的应用使用弹出框的时候,发现弹出框的宽度是根据其中内容的多少来决定宽度的,对于一个应用而言,UI 希望可以使用统一宽度的弹出框以达到和谐统一。
要在项目里实现统一弹出框宽度的要求,由于当时对源码中使用的各种 Style 不是很熟悉,不太敢改相关的样式,想到的一种方法是使用代码指定所需要的宽度。
方法
使用以下设置显示属性的方法去控制Dialog的显示宽度。
public static void setWidth(int dialogWidth, Dialog dialog, Context context) { if (dialog == null || context == null || dialogWidth < 0 || dialogWidth > 360) { return; } DisplayMetrics dm = new DisplayMetrics(); WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(dm); // 标准像素:屏幕宽度360dp // 若设置Dialog的宽度为 n dp,由于之前使用的 Dialog 样式中系统默认的属性中有个16dp的Padding ,所以实际显示为 (n - 32)dp // 所以:若设计稿为 m dp,则宽度需要设置为 (m + 32) / 360 * dm.widthPixels // 注:0.888888 --> m = 288 = 80% * 360 为当前样式系统默认下的最大宽度 double ratio = 0.888888; // default value if (dialogWidth != 0) { ratio = (double) (dialogWidth + 32) / 360; } dialog.getWindow().setLayout((int) (dm.widthPixels * ratio), ViewGroup.LayoutParams.WRAP_CONTENT);}public static void setWidth(Dialog dialog, Context context) { setWidth(0, dialog, context);}
调用方法的时机
举两个例子:
Dialog
对于Dialog,在其show之后立刻设置其显示属性。
mDialog = new AlertDialog.Builder(getActivity()) .setIconAttribute(android.R.attr.alertDialogIcon) .setMessage(messageId) .setNegativeButton(android.R.string.cancel, null) .setPositiveButton(positiveButtonId, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { doDeleteContact(contactUri); } } ) .create();mDialog.setOnDismissListener(this);mDialog.show();// 在show方法之后设置其显示属性DialogUtils.setWidth(mDialog, getActivity());
DialogFragment
对于DialogFragment形式的Dialog,在onStart方法中设置显示属性。
@Overridepublic void onStart() { super.onStart(); DialogUtils.setWidth(this.getDialog(), getActivity());}
0 0
- 设置Dialog的显示宽度
- Dialog显示宽度铺满屏幕宽度的设置
- Android Dialog设置宽度显示不正常的问题(自定义设置Dialog的宽高)
- android 如何设置自定义dialog的宽度
- dialog如何设置宽度
- 全屏显示Dialog的设置
- 全屏显示Dialog的设置
- 如何设置Dialog宽度为屏幕宽度
- android 设置dialog 宽度为屏幕宽度
- Android 自定义dialog 设置宽度
- 设置Combo box控件的显示宽度
- 如何设置Dialog铺满全屏,更改Dialog的显示位置!!!
- 设置Activity的显示形式为Dialog
- 如何设置dialog显示的位置
- 设置dialog显示位置
- 设置Dialog全屏显示
- Android Dialog AlertDialog 设置高度和宽度
- 之定义Dialog的宽度
- Android的生命周期(三)--Activity的生命周期
- Gym 101246(ACM ICPC 2010-2011, NEERC, Southern Subregional Contest Russia, Saratov)
- PyQt IDE 环境搭建
- Java从入门到精通阅读笔记(第4版)12
- 螺旋方针(螺旋矩阵)
- 设置Dialog的显示宽度
- 《win32多线程程序设计》学习笔记四
- 关于verilog中if与case语句不完整产生锁存器的问题
- Windows网络编程(基础篇2)
- 转载
- MySQL分区表
- C#读取与写入配置文件
- ArrayList总结
- vue基础