雖然一直在布局檔案裡面使用長度的計量機關dip。可是一直弄不清楚他到底表示什麼,是怎麼進行計算的。
其實dip就是一個實體長度機關,跟厘米是同一個概念。也就是說不管你的螢幕分辨率是多少都好,我的長度就定死這麼長了。是以可以把它看成跟厘米一樣的計量機關。
計算方法:
首先要引入DPI的概念,DPI表示每英寸像素數,就是你手機螢幕像素除以手機的寬高。如120dpi,160dpi等,假設QVGA(320*240)分辨率的螢幕實體尺寸是(2英寸*1.5英寸),dpi=160。
而dip = px / (DPI / 160)。這個公式可以換算為Px / screenWidthPx = dip / (width * 160)。是以dip是一個跟厘米一樣的實體計量機關,不是我過去認為的一個比例。
如何做到自适應螢幕大小呢?
1)界面布局方面
需要根據實體尺寸的大小準備5套布局,layout(放一些通用布局xml檔案,比如界面中頂部和底部的布局,不會随着螢幕大小變化,類似windos視窗的title bar),layout-small(螢幕尺寸小于3英寸左右的布局),layout-normal(螢幕尺寸小于4.5英寸左右),layout-large(4英寸-7英寸之間),layout-xlarge(7-10英寸之間)
2)圖檔資源方面
需要根據dpi值準備5套圖檔資源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi
Android有個自動比對機制去選擇對應的布局和圖檔資源
螢幕級别 | 螢幕密度 | 比率(相對) | 實體大小(英寸) | 像素大小 | 通常的分辨率 | |
ldpi | 120 | 3 | 0.75 | 1 | 120 | |
mdpi | 160 | 4 | 1 | 1 | 160 | 320*480 |
hdpi | 240 | 6 | 1.5 | 1 | 240 | 480*800 |
xhdpi | 320 | 8 | 2 | 1 | 320 | 720*1280 |
xxhdpi | 480 | 12 | 3 | 1 | 480 | 1080*1800 |