android 对话框 自适应屏幕,Android小工具之自适应自定义对话框的宽度

因为安卓的分辨率和尺寸繁多,所以我们在开发时需考虑控件的自适应,这不,在自定义对话框的时候是不是有这样的苦恼:对话框的宽度无法和系统的对话框宽度一样。这里就送大家一个可以自适应的对话框:

import android.app.DialogFragment;

import android.view.WindowManager;

/**

* Created by solo on 15/1/19.

*/

public class MinimumDialogFragment extends DialogFragment {

@Override

public void onStart() {

super.onStart();

WindowManager.LayoutParams lp = createLayoutParams(getDialog());

getDialog().getWindow().setAttributes(lp);

}

public static WindowManager.LayoutParams createLayoutParams(Dialog dialog) {

Activity context = dialog.getOwnerActivity();

final DisplayMetrics metrics = context.getResources().getDisplayMetrics();

final boolean isPortrait = metrics.widthPixels < metrics.heightPixels;

float percent;

if (isPortrait) {

percent = context.getResources().getFraction(R.fraction.dialog_min_width_minor, 1, 1);

} else {

percent = context.getResources().getFraction(R.fraction.dialog_min_width_major, 1, 1);

}

int width = (int) (context.getResources().getDisplayMetrics().widthPixels * percent);

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();

lp.copyFrom(dialog.getWindow().getAttributes());

lp.width = width;

lp.height = WindowManager.LayoutParams.WRAP_CONTENT;

return lp;

}

}

上面的代码中,有个需要注意的方法:

context.getResources().getFraction(int id, int base, int pbase)

id参数我们传入了一个fraction的资源,后两个参数按官方文档的意思可以动态改变分子和分母的值,也就是分子*base,分母*pbase,在这里我们保持分数不变,所以两个都传入1。

最后根据屏幕宽度算出对话框占用的百分比:

int width = (int) (context.getResources().getDisplayMetrics().widthPixels * percent);

在这里我们还没有做完,因为平板上的对话框并不像手机一样那么窄,而且还有横竖屏之分,所以当横屏的时候,我们需要给予对话框不同的百分比宽度。分别添加以下xml文件(文件由官方源码提供):

.../values/dimens.xml

65%

95%

.../values-large/dimens.xml

55%

80%

.../values-xlarge/dimens.xml

45%

72%

感谢各位读者,喜欢的话点个赞吧,有哪里不懂的也可以在下方留言。:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值