Android Galaxy S4使用的值大吗?

时间:2013-12-10 00:44:06

标签: android android-layout

问题:

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

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

给定以下文件夹,它选择S4的值大文件夹:

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中的维度值)以查看它所选择的目录。

3 个答案:

答案 0 :(得分:2)

  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的大型显示的两个窗格布局。

答案 1 :(得分:1)

  

大屏幕(任意方向)的主/细双窗格布局

看起来很好。这意味着您将-xlarge以及-large使用此功能。

  

和横向高dpi的中等屏幕

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

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

  

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

请注意,您尚未说明问题所在。

  

Sony Xperia Z1 AVD

我不知道SONY为他们的设备分发仿真器图像。

  

与S4 AVD做同样的事情

我不知道三星为他们的设备分发仿真器图像。

  

我是否可以使用值文件夹使Galaxy S4根本不选择Master / Detail,但是仍允许平板电脑使用它?

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

  

有没有办法让它只在风景中使用Master / Detail for S4?

您可以使用-normal-land标识-normal方向的-land设备。请注意,屏幕尺寸(-normal)有点模糊匹配,因为Android认为该尺寸类或更大中的设备有效。因此,如果没有更好的匹配,-normal-land-large-land设备也会使用-xlarge-land

(请注意,密度限定符甚至更模糊 - -mdpi将用于任何设备密度,没有更好的匹配,因为密度限定符仅用于设计在drawable目录上,Android可以应用重新采样算法。对除drawables和可能维度资源之外的任何内容使用密度限定符都是代码气味。)

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

  

这是使用模拟器的Eclipse / ADT包中的全部内容。

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

除非您从设备制造商处下载了某些内容(例如亚马逊带有针对Kindle Fire系列的模拟器图像),否则从不说您有“Sony Xperia Z1 AVD”或“S4 AVD” ”。你在欺骗我们,更糟糕的是,你在欺骗自己。充其量,您有一个模拟器映像,您认为已配置为匹配这些设备的规范。但是:

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

我们当然欢迎您说您正在-normal -hdpi仿真器上进行测试,因为这些是您通过AVD Manager的设备定义选项卡直接控制的内容。< / p>

答案 2 :(得分:0)

看完你的评论后,我注意到你说你说你定义的Galaxy S4屏幕尺寸是4.9&#34;?我见过的所有规格都说它是5&#34;这将实际改变设备定义中的大小&#34; normal&#34;到&#34;大&#34;一旦你正确地将S4和Nexus 5设置为5&#34;。

将Galaxy S4模拟器的定义编辑为5&#34;所以你有正确的屏幕尺寸,它会自动将大小更改为大,所以你需要决定是否需要将它切换到正常然后从那里开始。另外,对于那些想知道的人来说,一旦avd开始,就会说它从sw480dp文件夹中拉出来,所以在你的情况下,你需要一个新的文件夹:

  

values-sw480dp 或消除此广告素材中的大型设备 values-normal-sw480dp