2012-12-07 240 views
1

我已經做了大量的研究,但我覺得我並不完全瞭解如何支持不同屏幕尺寸的整個系統。android設備屏幕尺寸支持大屏幕

所以我的設計師想知道我想支持哪些屏幕尺寸,他想知道最初要建立的分辨率。

所以我建議,我想支持以下,

屏幕大小正常
MDPI - 是 華電國際 - 是 xhdpi - 是

到目前爲止,我認爲以下,

正常屏幕MDPI - 小320x480 - 160ppi 正常屏幕HDPI - 480×800 - 240ppi 正常屏幕xhdpi - 640x960的 - 320PPI

問題是如何爲屏幕定義資源? 720x1280?我是否使用爲640x960定義的資源?

有點像S3

+0

我只是想澄清,我的想法是否正確) – Hades

回答

7

我已經在這裏陳述application-skeleton-to-support-multiple-screen與設計師的觀點。

它是列出設備屏幕的百分比差異

Ldpi- 75%
Mdpi- 100%
Hdpi- 150%
XHdpi- 200%

但是,正如我們現在知道大多數的設備來與480X800所以我認爲這是基於設備,所以我們的新計算將如此

Ldpi- 50%
Mdpi- 66.67%
Hdpi- 100%
XHdpi- 133.33%

基於因爲當我們放大較小的圖像則圖像變得模糊,所以你可以採取XHdpi開始製作更大尺寸的作品,然後再縮小尺寸。

現在關於它與高分辨率來的設備與Android 3.0版蜂窩介紹720x1280即S3

你有最小寬度概念(SW)預選賽

繪製-SW? ?dp

設備分爲屏幕寬度,所以如果我們創建一個名爲drawable-sw360dp的文件夾,那麼具有720dp(寬度或高度)的設備將會u se資源來自this文件夾。

例如找到三星Galaxy S3 DP的後綴drawable-sw?dp 隨着DP Calculation參考,如果你想支持你的佈局或繪製到S3則計算說

PX =設備的寬度= 720
DPI =設備的密度= 320

公式給出

px = dp * (dpi/160) 

交換公式,因爲我們有PX的價值

dp = px/(dpi/160) 

現在把價值,

dp= 720/(320/160); 
dp=360. 

所以drawable-sw360dp將做的工作爲S3

GsmArena獲取您的設備配置,同樣的路,你可以也爲不同的設備創建文件夾(尷尬/最新的)

您也可以爲您的佈局文件夾後綴相同的值layout-sw360dp

+1

輝煌,非常感謝 – Hades

0

可以使用SVG庫矢量圖形和非常有益的,支持多分辨率的屏幕的源代碼是here

2

我也同意誰已經張貼鏈接Supporting Multiple Screens其他人在Android Developer網站上,因爲它是瞭解屏幕類(小,普通,大)與不同屏幕密度(ldpi,mdip,hdpi)之間差異的理想資源。

關於Metrics and Grids也有一篇非常有趣的文章,它幫了我很多。

你也應該保持像素的規模,你的頭回沾:

ldpi: 1dp = 0.75pxmdpi: 1dp = 1pxhdpi: 1dp = 1.5pxxhdpi: 1dp = 2px

我個人喜歡LDPI約240×320,MDPI分辨率關聯與320x480,hdpi與480x800和xhdpi與任何更大的,如SGS3。例如,

例如,指向Metrics and Grids的鏈接指出按鈕應至少爲48dp。 這意味着如果你想創建一個大小爲48x48,相當於48x48 px for mdpi的按鈕,你還必須提供一個圖形96x96 px for xhdpi72x72 px for hdpi36x36 px for ldpi

我也建議你和你的設計師看看9-patch images並嘗試調整你的用戶界面。這會讓你作爲開發者的生活更加麻煩。 原因在於您可以創建小型圖片,這些圖片可以在整個應用中縮放非常好看。

這很明顯,你應該嘗試以最高分辨率(例如xhdpi)創建圖形,然後縮減爲hdpi,mdpi和ldpi。

我遇到的另一個提示,我沒有資源了,是使用Android中的資源文件夾,因爲與僅提供大圖像相比,它會更好地提高性能,並讓OS隨時隨地縮小尺寸。 (But this SO post has some valid arguments in the answers

0

你應該嘗試這樣的事: 對於轉化率從displayPixels爲像素

(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); 

和像素screenPixels

(pixels/context.getResources().getDisplayMetrics().scaledDensity);