图片的像素和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充满屏幕。

 

posted on 2016-02-29 20:05  随风起  阅读(1429)  评论(0编辑  收藏  举报

导航