美文网首页Android 轮子androidAndroid
Android小工具之自适应自定义对话框的宽度

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

作者: SoloHo | 来源:发表于2015-04-20 11:54 被阅读7984次

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

    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

    <item type="fraction" name="dialog_min_width_major">65%</item>
    <item type="fraction" name="dialog_min_width_minor">95%</item>
    

    .../values-large/dimens.xml

    <item type="fraction" name="dialog_min_width_major">55%</item>
    <item type="fraction" name="dialog_min_width_minor">80%</item>
    

    .../values-xlarge/dimens.xml

    <item type="fraction" name="dialog_min_width_major">45%</item>
    <item type="fraction" name="dialog_min_width_minor">72%</item>
    

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

    转载请附上本文地址

    相关文章

      网友评论

      本文标题:Android小工具之自适应自定义对话框的宽度

      本文链接:https://www.haomeiwen.com/subject/xgayfttx.html