android设备屏幕尺寸支持大屏幕

时间:2012-12-07 13:23:50

标签: android screen dpi

我做了很多研究,但我觉得我还不太了解如何支持不同屏幕尺寸的整个系统。

所以我的设计师想知道我想要支持哪些屏幕尺寸,他想知道最初要构建哪种分辨率。

所以我建议我想支持以下内容,

屏幕尺寸正常
 mdpi - 是的  hdpi - 是的  xhdpi - 是的

到目前为止,我假设了以下内容,

正常屏幕mdpi - 320x480 - 160ppi 正常屏幕hdpi - 480x800 - 240ppi 正常屏幕xhdpi - 640x960 - 320ppi

问题是如何为屏幕定义资源? 720x1280?我是否使用为640x960定义的资源?

像S3这样的东西

4 个答案:

答案 0 :(得分:6)

我已经在这里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作为基础,因为当我们放大较小的图像时,图像会变得模糊,因此开始制作更大尺寸的图稿然后再缩小。

现在关于具有高分辨率 720x1280 即S3

的设备

你有Android V3.0 Honeycomb引入的最小宽度概念(SW)的限定符

  

抽拉-SW ??? DP

设备被分类为屏幕宽度,因此如果我们创建名为drawable-sw360dp的文件夹,那么720dp(宽度或高度)的设备将使用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 :(得分:2)

我也同意在Android开发者网站上发布Supporting Multiple Screens链接的其他人,因为它是了解屏幕类(小型,普通型,大型)之间差异的绝佳资源和不同的屏幕密度(ldpi,mdip,hdpi)。

还有一篇关于Metrics and Grids的非常有趣的文章,它帮助了我很多。

你还应该保持像素的比例在你的脑后蘸:

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

我个人喜欢将ldpi与分辨率约为240x320,mdpi与320x480,hdpi与480x800以及xhdpi相关联,如SGS3。

例如,指向Metrics and Grids的链接指出按钮应至少为48dp。 这意味着,如果您要创建大小为48x48的按钮(转换为48x48 px for mdpi),您还必须提供96x96 px for xhdpi72x72 px for hdpi和{的图形{1}}。

我还建议您和您的设计师查看9-patch images并尝试调整您的UI。这将使您作为开发人员的生活减少麻烦。 这样做的原因是您可以创建小尺寸图像,这些图像可以在整个应用程序中进行非常好的扩展。

很明显,您应该尝试以尽可能高的分辨率(例如xhdpi)创建图形,然后缩小到hdpi,mdpi和ldpi。

我遇到的另一个提示,我没有源代码,是使用Android中的资源文件夹,因为与仅提供大图像相比,它会更好地提高性能,并让操作系统在旅途中缩小它。 (But this SO post has some valid arguments in the answers

答案 2 :(得分:0)

您可以将SVG库用于矢量图形,对于支持多分辨率屏幕非常有用,源代码为here

答案 3 :(得分:0)

你应该尝试这样的事情: 用于从displayPixels转换为Pixels

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

和像素到screenPixels

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