Android 获取屏幕大小以及尺寸

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40543575/article/details/83151274

在Android开发中,获取手机屏幕像素的方法有多种。在这里,我仅仅做一个小小的总结,将这些方法分为两类。一类是使用Activity类来获取,另一类便是使用上下文(Context)来获取。

/**
 * @ 获取当前手机屏幕的尺寸(单位:像素)
 */
public static float getPingMuSize(Context mContext) { int densityDpi = mContext.getResources().getDisplayMetrics().densityDpi;
    float scaledDensity = mContext.getResources().getDisplayMetrics().scaledDensity;
    float density = mContext.getResources().getDisplayMetrics().density;
    float xdpi = mContext.getResources().getDisplayMetrics().xdpi;
    float ydpi = mContext.getResources().getDisplayMetrics().ydpi;
    int width = mContext.getResources().getDisplayMetrics().widthPixels;
    int height = mContext.getResources().getDisplayMetrics().heightPixels;

    // 这样可以计算屏幕的物理尺寸
    float width2 = (width / xdpi)*(width / xdpi);
    float height2 = (height / ydpi)*(width / xdpi);
    
    return (float) Math.sqrt(width2+height2);
}

有一些需求是获取屏幕的大小像素

        // 通过Activity类中的getWindowManager()方法获取窗口管理,再调用getDefaultDisplay()方法获取获取Display对象
        Display display = getActivity().getWindowManager().getDefaultDisplay();
        // 方法一(推荐使用)使用Point来保存屏幕宽、高两个数据
        Point outSize = new Point();
        // 通过Display对象获取屏幕宽、高数据并保存到Point对象中
        display.getSize(outSize);
        // 从Point对象中获取宽、高
        int x = outSize.x;
        int y = outSize.y;
        // 通过吐司显示屏幕宽、高数据522
        Toast.makeText(context, "手机像素为:X:" + x + "  Y:" + y, Toast.LENGTH_LONG).show();

获取屏幕宽高及尺寸的方法

	    // 通过WindowManager获取
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        System.out.println("width-display :" + dm.widthPixels);
        System.out.println("heigth-display :" + dm.heightPixels);

		// 通过Resources获取
        DisplayMetrics dm2 = getResources().getDisplayMetrics();
        System.out.println("width-display :" + dm2.widthPixels);
        System.out.println("heigth-display :" + dm2.heightPixels);

		// 获取屏幕的默认分辨率
        Display display = getWindowManager().getDefaultDisplay();
        System.out.println("width-display :" + display.getWidth());
        System.out.println("heigth-display :" + display.getHeight());
    private static double mInch = 0;  
    /** 
     * 获取屏幕尺寸 
     * @param context 
     * @return 
     */  
    public static double getScreenInch(Activity context) {  
        if (mInch != 0.0d) {  
            return mInch;  
        }  
      
        try {  
            int realWidth = 0, realHeight = 0;  
            Display display = context.getWindowManager().getDefaultDisplay();  
            DisplayMetrics metrics = new DisplayMetrics();  
            display.getMetrics(metrics);  
            if (android.os.Build.VERSION.SDK_INT >= 17) {  
                Point size = new Point();  
                display.getRealSize(size);  
                realWidth = size.x;  
                realHeight = size.y;  
            } else if (android.os.Build.VERSION.SDK_INT < 17  
                    && android.os.Build.VERSION.SDK_INT >= 14) {  
                Method mGetRawH = Display.class.getMethod("getRawHeight");  
                Method mGetRawW = Display.class.getMethod("getRawWidth");  
                realWidth = (Integer) mGetRawW.invoke(display);  
                realHeight = (Integer) mGetRawH.invoke(display);  
            } else {  
                realWidth = metrics.widthPixels;  
                realHeight = metrics.heightPixels;  
            }  
      
            mInch =formatDouble(Math.sqrt((realWidth/metrics.xdpi) * (realWidth /metrics.xdpi) + (realHeight/metrics.ydpi) * (realHeight / metrics.ydpi)),1);  
      
      
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
      
        return mInch;  
    }  
    /** 
     * Double类型保留指定位数的小数,返回double类型(四舍五入) 
     * newScale 为指定的位数 
     */  
    private static double formatDouble(double d,int newScale) {  
        BigDecimal bd = new BigDecimal(d);  
        return bd.setScale(newScale, BigDecimal.ROUND_HALF_UP).doubleValue();  
    }  

另提一点,我们通常所指的屏幕上的int尺寸是像素单位,如需在java代码中使用dp设定宽高请参考以下两个方法。

//pixel = dip*density;  
private int convertDpToPixel(int dp) {  
    DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();  
    return (int)(dp*displayMetrics.density);  
}  
  
private int convertPixelToDp(int pixel) {  
    DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();  
    return (int)(pixel/displayMetrics.density);  
} 

以及动态设置View宽高的方法

//获取view 的布局参数
ViewGroup.LayoutParams layoutParams = mShareBackgroundSign.getLayoutParams();
//设置宽度,也可自定义
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
//设置高度
layoutParams.height = layoutParams.height = convertDpToPixel(480);;
//重新给view设置布局参数
mShareBackgroundSign.setLayoutParams(layoutParams);

猜你喜欢

转载自blog.csdn.net/qq_40543575/article/details/83151274