Android 獲取屏幕大小以及尺寸

在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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章