應對繁多的分辨率和尺寸。
圖片的話,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),這樣的體驗很糟糕的。
作者 心之所在