• 图片的像素和Android的dp值之间的关系。


    这是一个困扰我很就得问题。今天在我的反复摸索下,总结出了一些个规律。

    以下测试以魅族mx5为例。

    手机参数:5.5英寸;高:1920;宽1080.

    /**
         * 获得屏幕的宽度
         * 
         * @param context
         * @return
         */
        public static int getScreenWidth(Context context) {
            DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
            return (int)(displayMetrics.widthPixels/displayMetrics.density);
        }
        /**
         * 获得屏幕的高度
         * @param context
         * @return
         */
        public static int getScreenHeight(Context context) {
            DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
            return (int)(displayMetrics.heightPixels/displayMetrics.density);
        }
        
        /**
         * 获得屏幕的像素宽度
         * @param context
         * @return
         */
        public static int getScreenWidthPx(Context context) {
            DisplayMetrics dm = new DisplayMetrics();
            WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            windowManager.getDefaultDisplay().getMetrics(dm);
            return dm.widthPixels;
        }
        
        /**
         * 获得屏幕的像素高度
         * @param context
         * @return
         */
        public static int getScreenHeightPx(Context context) {
            DisplayMetrics dm = new DisplayMetrics();
            WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            windowManager.getDefaultDisplay().getMetrics(dm);
            return dm.heightPixels;
        }

    执行各个方法,打印log,得到的数值:

    02-29 19:59:09.411: E/InsertADActivity(23228): getScreenHeight:640 getScreenWidth:360

    02-29 19:59:09.412: E/InsertADActivity(23228): getScreenHeightPx:1920 getScreenWidthPx:1080

        /**
         * 获取屏幕的密度
         */
        public static float getdensity(Context context) {
            DisplayMetrics dm = new DisplayMetrics();
            WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            windowManager.getDefaultDisplay().getMetrics(dm);
            LogUtil.e("getdensity", "dm.density:"+dm.density+" dm.densityDpi"+dm.densityDpi);
            return dm.density;
        }

    02-29 20:01:56.685: E/getdensity(23228): dm.density:3.0 dm.densityDpi480

        if (relativeLayout.getParent()!=null) {
                ((ViewGroup) relativeLayout.getParent()).removeView(relativeLayout);
            }
            insertAdDialog = new AlertDialog.Builder(mActivity).setView(relativeLayout).create();
            insertAdDialog.setCanceledOnTouchOutside(false);
            insertAdDialog.show();
             WindowManager.LayoutParams p = insertAdDialog.getWindow().getAttributes(); // 获取对话框当前的参数值
             p.height = (int) (DeviceInfo.getScreenHeightPx(mActivity)); 
             p.width = (int) (DeviceInfo.getScreenWidthPx(mActivity)); 
             insertAdDialog.getWindow().setAttributes(p);

    当这样设置时,dialog充满屏幕。

  • 相关阅读:
    2017普及组D1T3 洛谷P3956 棋盘
    2017提高组D1T1 洛谷P3951 小凯的疑惑
    Title
    Title
    Title
    Title
    Title
    Title
    Title
    Title
  • 原文地址:https://www.cnblogs.com/bigthing33/p/5228762.html
Copyright © 2020-2023  润新知