0

我正在为 Android(API 10)实现一个应用程序。我的平板电脑(据说)和手机的设计很少。关于上一句,这听起来可能有点愚蠢:在我看来,布局应该根据设备的物理尺寸而不是分辨率来选择,否则可能会有一部高分辨率的手机呈现 5x5 的网格,相当混乱,不够小巧的方式。为了按物理大小提供划分,我必须使用/res/layout- * 文件夹。同意?

另外:我对多屏指南对物理尺寸的定义有点困惑。您介意解释一下 Android 的物理尺寸是什么意思吗?它的测量单位是什么?与 dpi有任何相关性吗?

谢谢。

4

4 回答 4

1

api 级别 10 的解决方法可能是这样的:

  1. 使用 SDK 中的兼容库,以便您可以使用片段进行设计。

  2. 假设 android 3 之前的一切都是手机。例如,为此使用 layout/* 中的布局文件(其余的将基于它,除非被覆盖)。这种假设基本上只对 2009 年的原始三星 Galaxy Tab 7" 是错误的。

  3. 假设 android 3.x 上的所有东西都是平板电脑(它们是),所以如果你愿意,可以做一些平板电脑特定的布局,并将它们放在 layout-v11 下(如果有任何特定于 android 3.1 的东西,也可能还有 layout-v12)。特定于平板电脑的布局可能意味着您以不同方式排列片段和/或同时显示多个片段。

  4. 一切更新(android 3.2+)你可以使用来自 api 级别 13 的新东西。例如 layout-sw600dp/ 用于某些布局等。http://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts

于 2012-05-02T19:24:24.053 回答
0

物理尺寸通常以英寸为单位,它只是告诉您真实设备的屏幕尺寸(手机通常为 3-4 英寸,平板电脑通常为 8-11 英寸)。

dpi,与它不相关。Dpi 表示屏幕密度,即在给定区域(通常是一平方英寸)中显示多少像素。它可以被认为是衡量屏幕质量的标准。

分辨率由两者的乘积给出;它表示屏幕上物理像素的总数。

回到你的第一个问题,你应该尽可能地独立于密度;你的应用在不同密度的设备上应该“看起来一样”。/ res/layout- * 文件夹旨在提供此功能,系统将可绘制资源缩放到适当的大小,然后您可以在清单中声明您的应用程序支持任何密度:

android:anyDensity="true"

http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch页面上,您可以了解 Android 如何选择最佳匹配资源。

于 2012-05-02T13:07:33.400 回答
0

使用 Android API 10,针对平板电脑的最佳选择可能只是使用以下代码在代码中区分屏幕的实际大小: https ://stackoverflow.com/a/5789916/1319155 ,然后加载不同的可绘制对象(如果大小)返回的值大于 6(或您要声明为“平板电脑”的任何大小)。

你不能真的只使用大小文件夹(即布局/大)的原因是因为文件夹不能很好地区分手机和平板电脑。kindle fire 和galaxy nexus 都可以被认为是“大型”设备。

您不能真正使用 dpi 的原因是因为这不能很好地反映它是什么类型的设备,而不能很好地反映屏幕上像素的“密集程度”。无论如何,大多数新手机都比平板电脑更密集(每英寸像素更多)。

于 2012-05-02T15:06:33.013 回答
0

有两种方法可以做到这一点。从 Android 1.6 (API 4) 开始,有四种布局可以描述显示器的物理尺寸:小、普通、大和超大。如http://developer.android.com/guide/practices/screens_support.html所述,这些对应于:

  • 超大屏幕至少为 960dp x 720dp
  • 大屏幕至少为 640dp x 480dp
  • 普通屏幕至少为 470dp x 320dp
  • 小屏幕至少为 426dp x 320dp

请注意,这些是以 DP 而非 DPI 衡量的。DPI 是每英寸点数,并指定屏幕密度。DP,也写成 DIP,是与密度无关的像素。再次来自指南:

与密度无关的像素 (dp)

定义 UI 布局时应使用的虚拟像素单位,以与密度无关的方式表示布局尺寸或位置。与密度无关的像素相当于 160 dpi 屏幕上的一个物理像素,这是系统为“中等”密度屏幕假定的基线密度。在运行时,系统会根据使用中屏幕的实际密度,根据需要透明地处理 dp 单位的任何缩放。dp 单位到屏幕像素的转换很简单:px = dp * (dpi / 160)。例如,在 240 dpi 的屏幕上,1 dp 等于 1.5 个物理像素。在定义应用程序的 UI 时,您应该始终使用 dp 单位,以确保您的 UI 在不同密度的屏幕上正确显示。

换句话说,160 DP = 1"。应用这个标准,我们看到:

  • xlarge 屏幕至少为 6" x 4.5"(对角线为 7.5")
  • 大屏幕至少为 4" x 3"(5" 对角线)
  • 普通屏幕至少为 2.9" x 2"(对角线 3.5")
  • 小屏幕至少为 2.6" x 2"(对角线为 3.3")

(不知道为什么选择如此奇怪,但这就是他们定义的。)

从 Android 3.2 (API 13) 开始,有更多选项,如下所述:http: //developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts

在这里您可以使用“最小屏幕宽度”、“可用宽度”或“可用高度”选项来定义自己的类别;同样,有问题的单位是 DP,即 1/160"。请注意,这些指定了设备上两个维度中较小的一个 - 例如,对于 7" 平板电脑,他们建议指定 layout-sw600dp,即“最小宽度 3.75 英寸”,这将介于 API 4 中定义的“大”和“特大”尺寸之间。他们对此主题有许多具体的评论,包括关于如何测量宽度的注释(它可能不包括像通知栏),因此值得查看文档。

于 2014-02-07T19:38:09.120 回答