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

scr*_*pse 12 android android-manifest screen-size google-play

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

编辑

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

我们以几个不同的设备为例.

机器人3

  • 4英寸显示屏
  • 540x960像素
  • 275 ppi

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

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

但是,这个设备比我想要支持的设备要小得多......但是文档看起来像3个计数中的2个,这个设备有一个"大"屏幕.对这个术语没有明确的定义是一个4英寸的屏幕"大".现在,让我们走得更远......

Nexus 4

  • 4.7英寸显示屏
  • 768x1280像素
  • 318 ppi

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

  • 此屏幕的物理尺寸位于"中"和"大"的边框上
  • 像素尺寸表示它可能是xlarge
  • ppi表明它是一个xhdpi设备

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

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

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

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

Fat*_*g47 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>
Run Code Online (Sandbox Code Playgroud)

或者使用它(4.7"和更小):

<supports-screens android:smallScreens="false"
                  android:normalScreens="true"
                  android:largeScreens="true"
                  android:xlargeScreens="true"
                  android:requiresSmallestWidthDp="536" />
Run Code Online (Sandbox Code Playgroud)

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

如何计算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

并且不要担心"已弃用警告",因为新建议的方法适用于平板电脑应用程序(IMO),其中UI不是全屏的,屏幕底部和顶部的一些空间占用标题栏和/或后面,菜单等等按钮,而您的游戏可能以全屏模式运行.

请访问Google文档http://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts:

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

  • 这将过滤掉Nexus 4等设备.其逻辑DPI设置为320 dpi,分辨率为1280x720.此屏幕规范自动识别为"正常大小"屏幕. (2认同)

Jiy*_*ark 3

不幸的是,没有办法根据设备的“物理”大小过滤掉设备,而这正是您想要的。

有两个原因。

  1. 屏幕尺寸只有四种类型:小、正常、大和超大。这太粗糙了。您想要更高的粒度:“过滤掉 LCD 小于 4.7 英寸的设备”,当前 Android 平台不支持此功能。
  2. 屏幕尺寸由逻辑密度决定,逻辑密度可以设置为与物理密度相差很大的值。例如,假设设备有 5 英寸屏幕,物理密度为 180 ppi。这可能是您想要支持的屏幕。然而,由于某种原因,制造商决定将设备的逻辑密度设置为 320 dpi。然后,无论其物理密度如何,该设备都被归类为小屏幕设备。

为了供您参考,让我向您展示根据逻辑密度和屏幕像素数确定屏幕尺寸的内部逻辑。

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