如何在AndroidManifest.xml中指定要禁止在小于4.7英寸设备的设备上安装?

时间:2013-01-28 20:00:37

标签: android android-manifest google-play screen-size

我的游戏在7英寸平板电脑上表现最佳,在10英寸平板电脑和5英寸三星Note尺寸设备上感觉非常好。对于像Nexus 4手机或S3这样大小的东西,它甚至可以玩得很开心。玩任何小东西都没有任何乐趣。在这种情况下,如何编写Manifest,以便它可以安装在从4.7英寸设备到10英寸平板电脑的任何设备上,同时受限于较小的手机?

修改

退一步,这个问题的原因是因为我发现Android开发者网站上的文档令人难以置信地混淆和冲突。让我们举一些例子来说明混淆的来源:

让我们举几个不同的设备。

Droid 3

  • 4英寸显示屏
  • 540x960 px
  • 275 ppi

查看支持屏幕的文档,我们可以推断......

  • 在4英寸处,它可能位于“大”的裸露边缘,但可能是中等的
  • 在540x960,它完全在“大”
  • 的最小值范围内
  • 在275 ppi它声称是一个hdpi屏幕

然而,这个设备远远小于我想要支持的设备......但是文档看起来好像是3个计数中的2个,这个设备有一个“大”屏幕。对这个术语没有明确的定义是一个4英寸的屏幕“大”。现在,让我们进一步......

Nexus 4

  • 4.7英寸显示屏
  • 768x1280 px
  • 318 ppi

查看支持屏幕的文档,我们可以推断......

  • 此屏幕的物理尺寸位于Medium和Large
  • 的边框上
  • 像素尺寸表示它可能是xlarge
  • ppi表示它是xhdpi设备

同样,没有理智的定义是一个4.7英寸的屏幕“xlarge”...屏幕的大小可能足够大使游戏愉快,但它是一个“中等”屏幕?一个“大”的屏幕?你怎么可能知道?

上述两部手机都是“中型”吗?当Nexus“大”时,Droid会“中等”吗?为什么或者为什么不?如果Nexus是“大”,那么与7英寸平板电脑有什么不同呢?这款平板电脑也应该是“大型”?

然后事实是文档声称支持屏幕/尺寸从3.2开始被弃用

但是,如果想要支持旧手机(假设适当的物理屏幕尺寸,以英寸为单位)和新平板电脑,或者如果它在树林中隐藏得很好,那么就没有明确指导如何使用它。有人可以清楚地列出什么 cretieria真的很重要为什么给定的设备适合给定的过滤器或失败?

4 个答案:

答案 0 :(得分:6)

我认为根据Google文档,这将满足您的要求(5"和更小):

<compatible-screens>

    <screen android:screenSize="large" android:screenDensity="ldpi" />
    <screen android:screenSize="large" android:screenDensity="mdpi" />

    <screen android:screenSize="xlarge" android:screenDensity="ldpi" />
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />

</compatible-screens>

或者使用它(4.7&#34;和更小):

<supports-screens android:smallScreens="false"
                  android:normalScreens="true"
                  android:largeScreens="true"
                  android:xlargeScreens="true"
                  android:requiresSmallestWidthDp="536" />

我推荐第二种方法,因为它更准确。

如何计算536?基于http://developer.android.com/guide/practices/screens_support.html我们有(身高x宽度):

  • xlarge屏幕至少为960dp x 720dp
  • 大屏幕至少为640dp x 480dp
  • 正常屏幕至少为470dp x 320dp
  • 小屏幕至少为426dp x 320dp

(720 - 480)/(7 - 4)= 80,480 +(80 * 0.7)= 536

并且不要担心&#34;已弃用警告&#34;,因为新推荐的方法适用于平板电脑应用程序(IMO),其中UI不是全屏的,屏幕底部和顶部的一些空格占用标题-bar和/或后退,菜单等按钮,而您的游戏可能以全屏模式运行。

http://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts的Google文档中查看此内容:

  

注意:使用这些限定符指定的尺寸不是实际的屏幕尺寸。相反,尺寸是以dp为单位的宽度或高度,可用于您的活动窗口。 Android系统可能会将某些屏幕用于系统UI(例如屏幕底部的系统栏或顶部的状态栏),因此某些屏幕可能无法用于您的布局。因此,您声明的大小应该特别关注您的活动所需的大小 - 系统会在声明为布局提供多少空间时考虑系统UI使用的任何空间。还要注意操作栏被视为应用程序窗口空间的一部分,虽然您的布局没有声明它,因此它减少了布局的可用空间,您必须在设计中考虑它。

答案 1 :(得分:3)

不幸的是,没有办法根据他们的物理过滤掉设备。尺寸,这就是你想要的。

有两个原因。

  1. 屏幕尺寸只有四种:小尺寸,普通尺寸,大尺寸和x尺寸。这太粗糙了。您需要更高的粒度:&#39;过滤掉LCD小于4.7英寸的设备,这在当前的Android平台中是不受支持的。
  2. 屏幕尺寸由逻辑密度决定,逻辑密度可设置为远大于物理密度的值。对于exaple,让我们假设一个设备有5英寸屏幕,物理密度为180 ppi。这可能是您要支持的屏幕。但是,出于某种原因,制造商决定将设备的逻辑密度设置为320 dpi。然后,无论物理密度如何,设备都被归类为小屏幕设备。
  3. 供您参考,让我向您展示根据逻辑密度和屏幕像素数确定屏幕尺寸的内部逻辑。

    http://androidxref.com/4.0.4/xref/frameworks/base/services/java/com/android/server/wm/WindowManagerService.java#5899

答案 2 :(得分:1)

  

在这种情况下,如何编写Manifest,以便它可以安装在从4.7英寸设备到10英寸平板电脑的任何设备上,同时受到小型手机的限制?

从技术上讲,你不能。

android:requiresSmallestWidthDp最接近您期望的目标。由于这是在与密度无关的像素中测量的,并且由于与密度无关的像素应该是1/160英寸,因此您可以通过乘以160得出任意数英寸的dp值。

但是,根据您的要求,这并不是指对角线。这指的是最短边的宽度(例如,纵向宽度,横向高度)。

因此,如果您可以根据最小宽度重新表达您的愿望,请使用android:requiresSmallestWidthDp,并且在引用Google Play是否尊重它时,请注意文档是搞砸了。您可以确定当您将应用程序上传到Play商店开发者控制台并查看哪些设备支持它时 - 找到一些您知道的设备太小(但应该运行您的应用程序)并查看它是否已过滤。

如果android:requiresSmallestWidthDp的文档是正确的,并且Play商店忽略它以进行过滤(grrrrr ...),那么你基本上已经搞砸了。下一个最接近的解决方案是根据其他答案使用<compatible-screens>,声称您只支持largexlarge屏幕尺寸。这将淘汰你想支持的范围低端的各种设备,但normal屏幕尺寸比你想要的要小得多(低至3“对角线)。

BTW,normal对角线为3“-5”,因此Droid 3为normal,而不是large。像素尺寸与屏幕尺寸完全无关。

答案 3 :(得分:0)

似乎在实际应用中没有正确的方法。而且我同意你的看法,即android开发指南是多么令人困惑和矛盾。根据我的经验,对于这类事情的一个很好的解决方法是,当您在开发者控制台中发布它时,只需更改哪些设备可以运行您的应用程序。我做了一个快速浏览,并在这里找到了一个类似的问题:

Filter the device screen size on the Android Market

似乎是最好的方法。祝你好运!