最近在看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());