0

我已经阅读了许多有关 Android 布局和屏幕尺寸的问题。我什至在这里提到了 Android 的页面 http://developer.android.com/guide/practices/screens_support.html#screen-independence

问题是我想念之间似乎有一个

我的应用程序支持 Gingerbread 到 Jelly bean 设备。我是这样配置的。

layout (for Gingerbread devices)
layout-sw320dp (for ICS/JB devies)
layout-sw600dp (for 7" tab's)
layout-sw720dp (for 10" tab's)

我在这些文件夹中有我所有的布局 xml,我通过使用 eclipse 中的图形布局并从设备更改为设备来调整它们以适应设备的大小。我以为一切都很好。

但是,我似乎缺少一些关键设备。

例如。在我的 Razr 上,它的大小不像 eclipse 图形布局中显示的那样。Razr 是 540x960 240dpi 设备,如果我使用公式获得 dp (dp = (px / dpi) * 160) 我得到 360dp,对吗?

这意味着它应该使用来自 sw320dp 的布局文件,对吧?出于某种原因,它会调整一些不合适的图标的大小。

另一个例子是使用 HTC Thunderbolt 的用户说他甚至无法加载应用程序。雷电是 480x800 和 217dpi,这将是 353dp?对吗?所以它应该从同一个 sw320dp 文件夹中提取资源。来自 Thunderbolt 的堆栈跟踪显示此错误

Caused by: java.lang.reflect.InvocationTargetException
Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f01006a a=-1}

该资源是 public static final int background_gb=0x7f01006a;

发生这种情况是因为它从布局文件夹而不是 layout-sw320dp 中提取布局。我将布局文件夹中的布局设置为用颜色而不是图片填充背景,因为我不断收到堆错误。当我在我的 nexus 一个模拟器上测试时,它工作正常。

所以我开始思考也许我没有正确地做到这一点。我查看了其他开发人员的 apk,我什至从未看到 layout-sw320dp 文件夹。但它似乎做了我最初需要做的事情。如果我把它排除在外,那么我的布局文件夹将控制 480x800 设备的布局,一直到我的 S4 的 1080x1920 设备。我看不出如何在一个布局 xml 中覆盖这么多设备。

对我有什么建议吗?

涵盖手机布局文件夹中所有内容的问题示例

连结一 在此处输入图像描述

连结 4 在此处输入图像描述

银河 S4 在此处输入图像描述

4

1 回答 1

0

Razr 是 540x960 240dpi 设备,如果我使用公式获得 dp (dp = (px / dpi) * 160) 我得到 360dp,对吗?

是的,最小宽度为 360dp。

出于某种原因,它会调整一些不合适的图标的大小。

那么你的布局有一个错误。

发生这种情况是因为它从布局文件夹而不是 layout-sw320dp 中提取布局。我将布局文件夹中的布局设置为用颜色而不是图片填充背景,因为我不断收到堆错误。

然后您的颜色资源中有一个错误,您在其中为某些场景提供了定义,但不是全部。

但它似乎做了我最初需要做的事情。

我不知道你是怎么下定决心的。

如果我把它排除在外,那么我的布局文件夹将控制 480x800 设备的布局,一直到我的 S4 的 1080x1920 设备。

正确的。

我看不出如何在一个布局 xml 中覆盖这么多设备。

由于它们都共享相似的屏幕尺寸,因此通常不会出现问题。您的 RAZR 的屏幕约为 4 英寸。HTC Thunderbolt 的屏幕约为 4 英寸。Galaxy S4 有一个约 4 英寸的屏幕。因此,它们通常应该具有相同的布局,因为它们都具有相同的基本屏幕尺寸。只要您使用与密度无关的测量单位,并且只要您创建流畅的布局,只要你有你的drawables在密度特定的目录,它通常“正常工作”。这与编写一个可以支持多种浏览器窗口大小的Web应用程序没有本质区别。

我有我的布局文件夹,然后是边距/文本/等的大小,我在 values-hdpi 和 values-xhdpi 中引用了dimens.xml。认为这是我最好的选择?

使用与密度无关的度量单位(即除 以外的任何单位px),通常您不需要与密度相关的dimens.xml. 实际上,通常情况下,您的dimens.xml版本(如果有的话)与您的布局版本相匹配(例如,您可能有values-sw600dp一个,因为您决定您的边距需要与 中的布局相比更大一些layouts-sw600dp)。

我仍然对使用图像作为背景的 GB 设备有疑问。他们必须使用颜色。不知道如何将它们隔离开来

在所有设备上使用背景颜色。或者,修复您的“堆错误”。您的问题可能与操作系统版本无关,因为堆大小通常不会直接因操作系统版本而异,而是因屏幕大小而异。

于 2013-07-08T13:40:05.727 回答