android 通用螢幕適配小結
1.目錄對應裝置關係
ldpi: 螢幕密度為120的手機裝置
mdpi: 螢幕密度為160的手機裝置(此為baseline,其他均以此為基準,在此裝置上,1dp = 1px)
hdpi: 螢幕密度為240的手機裝置
xhdpi: 螢幕密度為320的手機裝置
xxhdpi:螢幕密度為480的手機裝置
android預設的low=120 ;Medium =160; High = 240
2. 程式啟動圖示:
LDPI (Low Density Screen,120 DPI),其圖示大小為 36 x 36 px。
MDPI (Medium Density Screen, 160 DPI),其圖示大小為 48 x 48 px。
HDPI (High Density Screen, 240 DPI),其圖示大小為 72 x 72 px。
xhdpi (Extra-high density screen, 320 DPI),其圖示大小為 96 x 96 px。
xxhdpi(xx-high density screen, 480 DPI),其圖示大小為144 x 144 px。
3.桌面ICON的尺寸:5個尺寸的ICON,分別對應資源目錄res下以drawable_開頭的幾個資料夾內。
36*36 ——->drawable_ldpi目錄下
48*48 ——->drawable_mdpi目錄下
72*72 ——->drawable_hdpi目錄下
96*96 ——->drawable_xhdpi目錄下
144*144——>drawable_xxhdpi目錄下
4.圖片尺寸:和ICON對應,分別對應資源目錄res下以drawable_開頭的幾個資料夾內。
320*240 ——–>drawable_ldpi目錄下
480*320 ——–>drawable_mdpi目錄下
800*480 ——–>drawable_hdpi目錄下
1280*720 ——->drawable_xhdpi目錄下
1920*1080 ——>drawable_xxhdpi目錄下
5.注意
-
據px = dip * density / 160,則當螢幕密度為160時,px = dip
-
TextView 的字號最好使用 sp 做單位,而且檢視TextView的原始碼可知Android預設使用sp作為字號單位。將dip作為其他元素的單位。
-
圖片放在drawable中,等同於放在drawable-mdpi中,原因為:drawable目錄不具有螢幕密度特性,所以採用基準值,即mdpi
-
圖片放在某個特定drawable中,比如drawable-hdpi,如果裝置的螢幕密度高於當前drawable目錄所代表的密度,則圖片會被放大,否則會被縮小,放大或縮小比例 = 裝置螢幕密度 / drawable目錄所代表的螢幕密度
-
為了更全面的適配所有裝置,我們應該提供一套針對主流螢幕密度的圖片(目前為hdpi或xhdpi),其他密度通過系統自動縮放得到圖片
-
import android.content.Context; public class DimenUtils { public static int spTopx(Context context, float spValue) { float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } public static int pxTosp(Context context, float pxValue) { float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } public static int dipTopx(Context context, int dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } public static int pxTodip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } }