2012-12-07 176 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);