我正在使用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中的维度值)以查看它所选择的目录。
答案 0 :(得分:2)
values-large
等已被Android 3.2(?)弃用。它被values-sw720dp
之类的东西所取代,基本上没有一台设备在运行android 3.0或3.1。任何运行android 2.x的设备很可能是中型手机
这意味着,不需要使用这个旧的限定符。
values-sw720dp
表示,smallest width = 720dp
我怀疑,你的S4是那么宽
您应该使用values-w720dp
之类的限定符,这意味着width = 720dp
,其中宽度取决于您当前的方向
这比继承port
或land
组合更好,因为它显示了纵向宽度为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