【问题标题】:Android Galaxy S4 uses values-large?Android Galaxy S4 使用值-大?
【发布时间】:2013-12-10 00:44:06
【问题描述】:

问题:

我正在使用 Eclipse/ADT 包测试我的应用程序。在为模拟 Galaxy S4(定义为 “正常” 大小的设备)创建的 AVD 上,操作系统正在从 values-large 文件夹中选择 XML 文件。

Android 操作系统忽略了我为区分 S4 和平板电脑而定义的所有其他值文件夹。

给定以下文件夹,它为 S4 选择 values-large 文件夹:

values-large
values-sw720dp
values
values-normal-hdpi
values-normal-mdpi
values-normal-xhdpi
values-normal-xxhdpi
values-normal

问题是我有 Master/Detail (ListFragment/Detail-Fragment) 两个片段显示,只能在大屏幕(平板电脑)上正确显示。由于设备的大小,它无法在 S4 上正确显示。在小于 6" 宽的设备上,图标最终会显示在文本顶部,而不是文本右侧。唯一的区别是 S4 是横向的。

S4 是唯一一款正常尺寸的设备,可以横向显示两窗格布局。 Nexus 4 和其他人不能。在风景中,S4 的额外密度是它工作的原因。

我也不希望 S4 使用 values-large 目录中的 dimens.xml 文件。

问题:

这是正常/预期的行为吗?操作系统是否将 S4 归类为“大型”设备?操作系统忽略了我尝试用于定位 S4 的所有其他文件夹名称。因此,它更喜欢 3.2 之前的名称而不是较新的名称。

换句话说,当我尝试使用较新的文件夹名称时,例如 values-sw720dp,操作系统仍会选择大文件夹。

我有两个 AVD。我创建了一个以匹配 S4 的规格。另一个是 Sony Xperia Z1,它具有相同的规格,并且在您安装 Sony SDK 时可用。两个 AVD 均设置为 size=normal。我已经检查了每一个,以确保它们的设置没有错误。

谢谢。

编辑

我有一个新的 LG G2,它在尺寸和密度上与 S4 相似。它不使用 values-large 目录。我认为它正在使用values-normal-xxhdpi,但需要运行更多测试(更改dimens.xml 中的维度值)以查看它选择的目录。

【问题讨论】:

  • 您的问题写得相当混乱。包含所需资源的最终的、完整的资源目录集是什么?
  • @CommonsWare,我已经对其进行了编辑以使其更清晰。它奏效了吗?谢谢。
  • 您正在尝试拥有同时具有屏幕尺寸和屏幕密度限定符的资源目录。结果不太可能是你想要的。
  • Nexus 5 与 S4 基本相同,因此在您的示例中,它不是“唯一可以显示双窗格布局的正常尺寸设备”

标签: android android-layout


【解决方案1】:
  1. values-large 等已被 android 3.2 (?) 弃用。它被values-sw720dp 之类的东西所取代,并且基本上没有一台设备运行 android 3.0 或 3.1。任何运行 android 2.x 的设备很可能都是中型手机。
    这意味着,不需要使用这个旧的限定符。

  2. values-sw720dp 的意思是,smallest width = 720dp 我怀疑,你的 S4 有那么宽。
    您应该使用values-w720dp 之类的限定符,这意味着width = 720dp,其中宽度取决于您当前的方向。
    这比在portland 组合上进行中继要好得多,因为它显示了两个窗格布局,适用于具有720dp 宽度的大型显示器。

【讨论】:

  • 谢谢,但引用我已经知道的事实并不能帮助解释为什么 S4(运行 API 16+ 4.1.2+)在我还尝试了许多其他文件夹时被解析为 values-large 文件夹不同的 swxxx 和 wxxx 名称。现在,我想为旧平板电脑保留大文件夹,并阻止 S4 解析到该文件夹​​。
  • Sony Xperia Z1 AVD 的功能与 S4 AVD 相同。是否有未记录的功能会导致具有 xxhdpi 的正常大小的设备被归类为大型设备?
【解决方案2】:

大屏幕的主/细节两窗格布局(任何方向)

看起来不错。这意味着您将把它用于-xlarge-large

横向高 dpi 的中等屏幕

首先,我不知道什么是“中屏”,因为 Android 开发中不使用该术语。

其次,我不知道你为什么认为这是合适的。屏幕密度不应影响是否显示一个或两个窗格的决定。我很想知道由专家编写的应用程序,您会看到采用这种方法。

起初我以为是第二个文件夹 (sw720dp) 导致了问题

请注意,您没有说明问题所在。

索尼 Xperia Z1 AVD

我不知道 SONY 会为他们的设备分发模拟器图像。

与 S4 AVD 做同样的事情

我不知道三星为其设备分发模拟器图像。

是否有一个 values 文件夹可以让 Galaxy S4 完全不选择 Master/Detail,但仍允许平板电脑使用它?

忽略您的“横向高 dpi 中等屏幕”,对平板电脑使用 -large-xlarge。三星 Galaxy S4 不会使用-large-xlarge 资源,因为它是-normal 设备。使用此特定型号的 GT-I9500 和 SGH-I337 版本都证实了这一点。

有没有办法让它只在横向时使用 S4 的 Master/Detail?

您可以使用-normal-land 来识别-land 方向的-normal 设备。请注意,屏幕尺寸 (-normal) 有点模糊匹配,因为 Android 认为该尺寸类别的设备有效或更大。因此,在没有更好匹配的情况下,-large-land-xlarge-land 设备也将使用-normal-land

(请注意,密度限定符更加模糊——-mdpi 将用于 任何 设备密度,在没有更好匹配的情况下,因为密度限定符设计为仅用于 @ 987654337@ 目录,Android 可以在其中应用重采样算法。在除可绘制对象和可能维度资源之外的任何内容上使用密度限定符是一种代码味道。)

就我个人而言,我不会对-normal-land 设备使用双窗格策略,因为-normal 一直到对角线3 英寸。

这一切都在使用模拟器的 Eclipse/ADT 包中。

我的猜测是这就是你的问题所在。

除非您从设备制造商处下载了某些东西(例如,亚马逊及其 Kindle Fire 系列的模拟器图像),否则永远不要说您拥有“Sony Xperia Z1 AVD”或“S4 AVD” ”。你在对我们撒谎,更糟糕的是,你在对自己撒谎。充其量,您拥有一个您认为已配置为与这些设备的规格相匹配的仿真器映像。然而:

  • 假设您的配置正确
  • 假设设备制造商未在固件级别更改其设备的行为
  • 假设没有模拟器错误

当然欢迎您说您正在 -normal -hdpi 模拟器或类似设备上进行测试,因为这些都是您通过 AVD 管理器的“设备定义”选项卡直接控制的。

【讨论】:

  • 谢谢!我从:developer.sonymobile.com/knowledge-base/sony-add-on-sdk/… 下载了 Sony SDK。它具有 Xperia AVD。中=正常。问题:操作系统正在解析 S4 的 values-large 文件夹。
  • 您是说操作系统应该将 S4 视为普通尺寸的设备吗?那就是问题所在!它会忽略我尝试过的所有其他文件夹名称,并且总是转到大文件夹。
  • @RickFalck:“你是说操作系统应该将 S4 视为普通尺寸的设备吗?” - 是的。 “它忽略了我尝试过的所有其他文件夹名称,并且总是转到大文件夹。” -- 你在什么实际的 S4 上测试过?同样,我尝试了 S4 的 GT-I9500 和 SGH-I337 版本,它们都使用-normal 资源。
  • 是的!这就是我要说的!!!!!!!!!!!!!我在 Eclipse/ADT 中使用 AVD。你知道什么是AVD吗?我不知道如何更清楚地说明我没有使用真实电话!我在模拟器中使用 AVD!!!!根据您刚才所说,您真正的 S4 设备正在解析到 values-normal 目录。
  • 底线...尽管我认为我在设置 AVD 以测试“正常”大小的 xxhdpi 设备时做的一切都是正确的,但它使用的是 values-large 文件夹,我无法弄清楚如果这是模拟器代码中的错误,或者是操作系统在真实设备上的工作方式。我相信我已经做了我能做的一切。所以,要么我们的测试工具坏了,不能用来测试这些 AVD,要么这就是它应该如何工作的,你错了,它应该选择另一个文件夹。到目前为止,我认为你对待我就像我很愚蠢并且做错了@CommonsWare。
【解决方案3】:

阅读您的 cmets 后,我注意到您说您定义的 Galaxy S4 屏幕尺寸是 4.​​9"?我看到的所有规格都说它是 5",这实际上会将设备定义中的尺寸从“正常”更改为将 S4 和 Nexus 5 正确设置为 5 后“大”。

将 Galaxy S4 模拟器的定义编辑为 5",以便您拥有正确的屏幕尺寸,它会自动将尺寸更改为大,因此您需要决定是否需要将其切换为正常然后从那里开始。还有,对于那些想知道的人,一旦 avd 启动,它确实说它是从 sw480dp 文件夹中提取的,所以在你的情况下,你需要一个新文件夹:

values-sw480dp 或消除此存储桶中的大型设备,values-normal-sw480dp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多