1

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

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

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

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

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

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

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

有点像S3

4

4 回答 4

6

我已经在这里用设计师的视角说明了应用程序骨架到支持多屏幕。

列出了设备屏幕的百分比差异

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 计算,如果你想支持你的布局或可绘制到 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

于 2012-12-15T05:57:06.563 回答
2

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

还有一篇非常有趣的关于Metrics and Grids的文章对我帮助很大。

您还应该保持像素比例在您的脑后下降:

ldpi: 1dp = 0.75px, mdpi: 1dp = 1px,hdpi: 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 hdpi36x36 px for ldpi

我还建议您和您的设计师查看9-patch 图像并尝试调整您的 UI。这将使您作为开发人员的生活少很多麻烦。这样做的原因是您可以创建可以在整个应用程序中很好地缩放的小尺寸图像。

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

我遇到的另一个提示,我不再有来源了,是使用 Android 中的资源文件夹,因为与仅提供大图像相比,它的性能要好得多,并让操作系统缩小它去吧。(但是这个SO帖子在答案中有一些有效的论据

于 2012-12-10T15:47:12.350 回答
0

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

于 2012-12-07T13:29:36.447 回答
0

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

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

并将像素用于 screenPixels

(pixels / context.getResources().getDisplayMetrics().scaledDensity);
于 2012-12-15T06:42:03.470 回答