原文地址:http://android.xsoftlab.net/training/multiscreen/screendensities.html
這節課將會學習如何通過不同的資源和獨立的丈量單位來支持不同的屏幕密度。
你必須要避免這么1個圈套:在設計布局時,使用了絕對的像素單位來定義距離及尺寸。通過像夙來定義布局的尺寸是個問題,由于不同的屏幕含有不同的像素密度,所以在不同的裝備上使用同1像素長度會造成不同的物理尺寸。因此在指定尺寸時,應當總是使用dp或sp為單位。dp是1種密度獨立的像素單位,在160dpi時與像素的物理尺寸正好吻合(也就是說160dpi的屏幕dp正好等于sp)。sp一樣也是1種基準單位,但是它1種可伸縮的文本尺寸單位,所以應當在定義文本尺寸時使用該單位(絕不要在布局上使用該單位)。
比如說,在指定兩個View之間的空隙時,應當使用dp,而不是px:
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/clickme"
android:layout_marginTop="20dp" />
在指定文本大小時,總是使用sp:
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp" />
由于Android運行于種類繁多的裝備上,所以應當為普遍的密度范圍提供相應的位圖資源:low, medium, high及extra-high密度。這有助于提升所有屏幕密度的物理效果及性能。
為了產生這些位圖,應當通過原生資源生成多種密度的圖象:
這意味著如果為xhdpi的裝備生成了200x200的圖象,那末應當為hdpi提供的尺寸為150x150,mdpi為100x100,ldpi為75x75。
然后將這些文件分別放入適當的目錄下,在運行時,系統會根據當前的屏幕密度自動選擇正確的位圖:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
接下來,在任什么時候候援用@drawable/awesomeimage時,系統會基于屏幕的dpi選擇適合的位圖圖象。
最后將啟動圖標放入到mipmap/文件夾下:
res/...
mipmap-ldpi/...
finished_launcher_asset.png
mipmap-mdpi/...
finished_launcher_asset.png
mipmap-hdpi/...
finished_launcher_asset.png
mipmap-xhdpi/...
finished_launcher_asset.png
mipmap-xxhdpi/...
finished_launcher_asset.png
mipmap-xxxhdpi/...
finished_launcher_asset.png
Note: 應當將所有的啟動圖標放入到res/mipmap-[density]/文件夾下,而不是drawable/文件夾中,這樣可以確保桌面APP使用了最好的分辨率圖標。有關更多信息,請參見Managing Projects Overview。
有關更多創建圖標資源的提示與指南,請參見Icon Design Guidelines.