Android屏幕相關知識

Android屏幕相關知識


屏幕參數


  • 屏幕大小
    對角線的長度,比如我們常見的4.7寸/5.5寸。

  • 分辨率
    手機屏幕像素點的個數,比如720*1080,就是寬有720個像素點,高有1080個像素點。

  • PPI/DPI
    每英寸像素,我們計算的話就是對角線上的像素點數除以屏幕大小得到的。


手機屏幕密度


    在android系統中,系統定義個幾個標準的DPI值,用來作爲固定的DPI。我們在開發中美工會做不同屏幕密度的圖給開發人員,具體對照關係如下:
密度 ldpi mdpi hdpi xhdpi xxhdpi
密度值 120 160 240 320 480
分辨率 240*320 320*480 480*800 720*1280 1080*1920

獨立像素密度 dp


由於每個廠商的android手機的具有的不同的大小尺寸和不同像素密度的屏幕,屏幕尺寸碎片化嚴重。導致同樣像素大小的長度,在不同的屏幕上顯示長度不同。相同長度的屏幕,高密度的屏幕包含更多的像素點。

android系統是喲個mdpi密度值爲160的屏幕作爲標準,在這個屏幕上1dp=1px。其他屏幕通過比例進行換算,如下:

mdpi 1dp=1px
hdpi 1dp=1.5px
xhdpi 1dp=2px
xxhdpi 1dp=3px

由上表可以看出各個分辨率換算比例ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12。


單位換算


而我們在實際開發中考慮到屏幕適配,我們在佈局文件中儘量使用與屏幕的物理參數無關的單位如dp和sp,而不用px;在程序中,也可以很方便的對這些單位進行轉換,可將下面代碼作爲工具類保存在項目中。

public class DensityUtil {
    /**
     * 將dip或dp值轉換爲px
     * 
     * @param context
     * @param dpValue
     * @return
     */
    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 將px值轉換爲dip或dp
     * 
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * 將px值轉換爲sp
     * 
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2sp(Context context, float pxValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontScale + 0.5f);
    }

    /**
     * 將sp值轉換爲px
     * 
     * @param context
     * @param pxValue
     * @return
     */
    public static int sp2px(Context context, float spValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }

    /**
     * 獲得屏幕物理像素width
     * 
     * @param context
     * @return
     */
    public static int getScreenWidth(Activity context) {
        DisplayMetrics dm = new DisplayMetrics();
        context.getWindowManager().getDefaultDisplay().getMetrics(dm);
        return dm.widthPixels;
    }

    /**
     * 獲得屏幕物理像素height
     * 
     * @param context
     * @return
     */
    public static int getScreenHeight(Activity context) {
        DisplayMetrics dm = new DisplayMetrics();
        context.getWindowManager().getDefaultDisplay().getMetrics(dm);
        return dm.heightPixels;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章