【问题标题】:Android Multiscreen Support in android : 540x960 issueandroid 中的 Android 多屏支持:540x960 问题
【发布时间】:2012-05-07 11:13:56
【问题描述】:

我的应用程序支持 3 种密度 ldpi (120)、mdpi(160)、hdpi(320),为此我们有三个资源文件夹(ldpi、mdpi、hdpi)。

但我的问题出现在密度约为 256 dpi 的 HTC sense XE (540x960) 中。我的资源被拉伸了。

在清单文件中

<supports-screens android:xlargeScreens="false" /> 

表示我不支持 xlarge 屏幕,所以 540x960 是否具有高密度?? 我该如何克服这个问题???

Android Multiscreen Support issue 说“您也可以使用密度和尺寸限定符的组合,但这仍然为两种不同的分辨率落入同一个桶留下了一些空间。”

这种分辨率的drawble文件夹的名称应该是什么? 或者有没有其他方法可以解决这个问题。

编辑:我的问题不在于布局,我的问题 540x960 来自 HDPI,但我的 hdpi drawbles 设计与 480x800 相关

帮帮我..

提前谢谢..

【问题讨论】:

标签: android screen-resolution


【解决方案1】:

您可以将以下组合用于 HTC sense XE (540x960) 的布局:

res/layout-w540dp-h960dp/layout.xml 

这将用于此设备的拾取布局和可绘制它将从 hdpi 中选择图像,因为在此开发人员站点中 256 dp 在 hdpi 范围内。 http://developer.android.com/guide/practices/screens_support.html.

希望这会对你有所帮助。

【讨论】:

  • 我同意你的说法,但我的问题不在于布局,因为我的布局对于所有分辨率几乎都是相同的,问题是可绘制的。HTC 感觉在 hdpi 范围内,但我的 hdpi drawbles 是为480x800 与 540x960 完全不匹配并且被拉伸。
  • 我认为您可能需要使用可用于 480x800 和 540x960 的 .9 补丁图像。
  • 昨晚我对这个问题想了很多,我的一些drawbles资源非常静态,不能制作9补丁。因为它们非常静态。这可能是主要问题。:(
  • res/layout-w540dp-h960dp/layout 你确定它有效吗?因为我为具有 540X960 hdpi 的 HTC 感觉创建了一个 avd 但它从“布局”文件夹而不是这个文件夹中获取布局。
  • 你的 HTC Sensation android os 版本是多少?
【解决方案2】:

您的问题是您为特定的屏幕尺寸而不是屏幕密度设计了位图。

坦率地说,您不应该这样做。那里有大量不同的外形尺寸和屏幕尺寸,您不能希望为所有这些尺寸提供图形尺寸。因此,您为 540x960 屏幕解决了这个问题……那么使用 480x854 显示器(大多数 hdpi 摩托罗拉设备)的用户会怎样?如果您正在为此开发,您会为 1024x720 和 1280x720 显示器添加不同的图形吗? 1280x800呢?

当然 - 处理这些问题可能会很痛苦,但这就是我们为多样化设备付出的代价。 Google 提供了大量强大的工具供我们使用。

在为 Android 设计应用时,您需要将设计视为设计网站,而不是桌面(或 IOS)程序。您在设计网站时使用的所有(或大部分)技巧也适用于此 - 此外,您还拥有密度感知和 9.patch 工具。

如果您真的无法将图形/布局调整到屏幕上而不弄乱,您可以始终将布局放在显示屏的中心(或将其左对齐或右对齐,这取决于您认为最好的样式)。


编辑:

如上所述,Android 中灵活 UI 设计的核心是将您的应用视为网站。 Roman Nurik 在 Android 博客上有一篇讨论此问题的文章。

http://android-developers.blogspot.com/2011/09/thinking-like-web-designer.html

除此之外,它主要被Android网站等覆盖。

http://developer.android.com/training/multiscreen/index.html

使用正确的布局和 9-patch 图片(并非总是如此 - 有时静态图片更好)将允许您创建在所有手机上看起来都不错的设计。但是您必须意识到 - 就像在浏览器中设计的网站一样 - 您没有也不能 100% 控制事物在每台设备上的显示方式。您需要实现的是,即使显示在您事先没有预料到的设备上,它仍然可以访问且美观。

【讨论】:

  • 480x854 与 480X800 相同,所以没问题。第二件事是我们不支持超大屏幕。问题仅适用于 540x960 和某些可绘制对象。
  • 原理不变;以这种方式设计应用程序在 Android 上是个坏主意。并且选择掉 xlarge 显示器并不能保护您不必处理多个屏幕尺寸的问题。 Galaxy Nexus 的屏幕为 1280x720。 Galaxy Note 运行 1280x800。有 7" 平板电脑,屏幕为 1024x720。这些显示器都不会被视为超大。
  • 您能否告诉我更多信息(用于我的进一步应用)..有很多设备具有不同的分辨率并且采用 hdpi(大屏幕不在 xlarge 屏幕中)那么我该如何处理可绘制对象对于所有的 hdpi 设备。所有设备都具有相同的可绘制资源,那就是 hdpi。什么是主要方式???
  • 没有高手可以做到这一点;这完全取决于您的具体设计,以及您希望如何实现这一目标。但我已经链接到 Nurik 去年关于该主题的文章。
【解决方案3】:

您必须根据像素密度和屏幕尺寸来命名可绘制对象。计算在这里...

dpi = sqrt (540^2+960^2) / 4.3"(设备尺寸)= ~256 dp = px / (dpi / 160) = 540 / (dpi / 160) = 330

drawable 将被命名为 drawable-sw330dp。我已经对此进行了测试。这很好用。其他drawables也没有问题。布局将是 layout-sw330dp

或者你可以通过drawable-sw540p试试这个。我还没有测试过。但我想它会很好用。布局将是 layout-sw540p

【讨论】:

  • DisplayMetrics displayMetrics=new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); Log.e("TAG","displayMetrics.density="+displayMetrics.density+",displayMetrics.densityDpi="+displayMetrics.densityDpi+",displayMetrics.scaledDensity="+displayMetrics.scaledDensity); displayMetrics.densityDpi 给出了不同于计算的东西,
猜你喜欢
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多