應對繁多的分辨率和尺寸。
圖檔的話,android 是用 dpi 作為機關,你随便選擇一個圖檔,在win下面右鍵就會看到以dpi為機關的屬性,dpi越高圖檔也就越精細。對于手機或顯示裝置來說,一個像素就是一個點,是以dpi=ppi,反過來,經常說的手機螢幕ppi高低數字等同于寫程式時候考慮的dpi數值。
iphone4的視網膜螢幕是326ppi,屬于ldpi mdpi hdpi xhdpi的最後xhdpi(大約320ppi),後來的android手機大抵也都這個數值,往上也沒什麼意義,反正你眼睛看不出來,處于能省盡量省的原則,圖檔都用xhdpi算了,低ppi的手機自個兒系統處理的了。
然後是布局,布局 4寸左右是normal,4寸到7寸是large(這些都是估算而已)。根據公式 px
= dp * (dpi / 160)
和原則上
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
你計算下,normal的分辨率起碼是寬 2*dpi,4.65寸,720p分辨率的galaxy nexus是315ppi,寬應該為起碼 630,而720p的寬 720 正好符合。
再計算下 large,寬為3*dpi,連galaxy nexus都達不到要求。能達到要求的基本都是7寸+的平闆。
是以手機來說,同一種高寬比的話你隻要寫normal的布局。
加上之前文章說的,分辨率有未來主流的16:9和當下主流的15:9 兩種。
手機布局應該寫2個,但是當下貌似沒有辦法(除非代碼裡判斷)根據高寬比選擇特定布局。
當然與其說是布局,還不如說是布局裡面的圖檔的選擇,用同一個圖檔資源,在2個不同的高寬比螢幕上有一定的差異,是以隻能用到.9.png來處理。
android 3 和 4 引入的新布局機制,比如 sw600dp,是給平闆用的,跟手機木有關系。
結論就是:
res/layout/my_layout.xml
res/drawable-xhdpi/my_icon.png
16:9和15:9用.9.png來處理
google 本意是想一個apk同時跑在手機和平闆上,友善共用代碼,但是我感覺明顯同樣的程式手機和平闆的功能肯定會有不同的,大螢幕的可能性要比小螢幕大吧,而且各種界面布局+代碼都有,放一個項目裡反而感覺亂,還不如 ios 那種平闆的應用出個專門的 hd 版本。這種混合的政策很容易導緻手機版本被裝上平闆,然後就碰到了難看變形的界面(我知道是可以聲明針對特定螢幕,但是人家不一定會設定的,其中又牽扯到 screen compatibility mode),這樣的體驗很糟糕的。
參考:http://developer.android.com/guide/practices/screens_support.html