Android屏幕尺寸單位轉換

最近在看Android羣英傳這本書,書中有一節涉及到了,屏幕尺寸與單位。覺得以後可能會用到,做個筆記。

PPI(pixels per inch) ,又稱爲DPI,它是由對角線的像素點數除以屏幕的大小得到,通常達到400PPI就已經是非常高的屏幕了。

Android系統定義了幾個標準的DPI值,作爲手機的固定DPI

 

密度 ldpi mdpi hdpi xhdpi xxhdpi
密度值 120 160 240 320 480
分辨率 240X320 320X480 480X800 720X1280 1080X1920

Android系統使用mdpi即密度值爲160的屏幕作爲標準,在這個屏幕上1px=1dp

在各個密度值中的換算比例:3:4:6:8:12

單位轉換

px轉換爲dip或dp

public static int px2dp(Context context, float px) {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int)(px/scale+0.5f);
}

dp或dip轉換爲px

public static int dp2px(Context context, float dp) {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int)(dp*scale+0.5f);
}

px轉換爲sp

public static int px2sp(Context context, float px) {
    final float scale = context.getResources().getDisplayMetrics().scaledDensity;
    return (int)(px/scale+0.5f);
}

sp轉換爲px

public static int sp2px(Context context, float sp) {
    final float scale = context.getResources().getDisplayMetrics().scaledDensity;
    return (int)(sp*scale+0.5f);
}

同時也可以利用系統的TypedValue類來幫助我們轉換(其中dp,px分別爲待轉換的值):

dp轉換爲px

TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());

 

sp轉換爲px

TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, getResources().getDisplayMetrics());

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章