天天看點

Android 的不同尺寸圖檔和布局(手機)

應對繁多的分辨率和尺寸。

圖檔的話,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

繼續閱讀