设置设备支持指定的屏幕

来源:互联网 发布:js点击切换div内容 编辑:程序博客网 时间:2024/06/10 09:42
http://www.eoeandroid.com/thread-63171-1-1.html
 

快速预览

  • 设置设备支持指定的屏幕
  • 屏幕兼容模式

设置设备支持指定的屏幕

虽然理论上建议大家支持所有的屏幕设备,但这确实比较麻烦而且很容易出错。我们一般最好把手机和平板分时两大类来发布2个APK这样的效果会更好。你可以理解为我们需要针对个别

boss,换个职业来对付它,并且新职业需要熟悉设置一下

 

让我们的App只支持手机

 

因为系统通常会自动缩放来使我们的资源或者布局适应大屏幕,所以我们不需要过滤大屏幕。只要我们知道实践中应该注意哪些(上篇的内容)问题,我们的App讲在大屏幕上也能很好的显示。

但你可能发现你的App不会等比缩放的非常好,或者可能你决定只为你的App配置两个不同的屏幕适配版本。这种情况下,你可以使用<compatible-screens>节点来组合管理屏幕的密度和大

小。外部服务比如android market就使用这样的信息来过滤你的App,仅支持你App配置的设备才会被显示出来。

 

<compatible-screens> 节点必须包含一个或更多的<screen>节点,每一个<screen>节点中指定一个屏幕配置来兼容我们的App。我们需要使用使用android:screenSize

android:screenDensity这两个属性。每一个 <screen> 节点中必须包含2个属性来指定个别的屏幕配置,如果只有一个属性,那么这个节点是无效的。

 

例如,如果你的App兼容small和normal大小的屏幕 , 包括所有屏幕密度的话。你就必须指定8个 <screen> 节点,因为每一个屏幕大小中都有4种密度配置。你必须写出来,下面是在manifest中的实例代码:

 

<manifest ... >    <compatible-screens>        <!-- all small size screens -->        <screenandroid:screenSize="small"android:screenDensity="ldpi"/>        <screenandroid:screenSize="small"android:screenDensity="mdpi"/>        <screenandroid:screenSize="small"android:screenDensity="hdpi"/>        <screenandroid:screenSize="small"android:screenDensity="xhdpi"/>        <!-- all normal size screens -->        <screenandroid:screenSize="normal"android:screenDensity="ldpi"/>        <screenandroid:screenSize="normal"android:screenDensity="mdpi"/>        <screenandroid:screenSize="normal"android:screenDensity="hdpi"/>        <screenandroid:screenSize="normal"android:screenDensity="xhdpi"/>    </compatible-screens>    ...    <application ... >        ...    <application></manifest>
复制代码

 

让我们的App只支持平板

 

如果让我们App支持平板的话,我们可以完全放弃small屏幕的支持和优化。并在<supports-screens>节点中阻止小屏幕的设备在market上下载我们的App

 

实例代码如下:

 

<manifest ... >    <supports-screens                       android:smallScreens="false"                      android:normalScreens="false"                      android:largeScreens="true"                      android:xlargeScreens="true"                      android:requiresSmallestWidthDp="600"/>    ...    <application ... >        ...    </application></manifest>
复制代码

需要同时使用两种方法描述关于屏幕大小的支持:

 

  • 声明App不支持small 和normal的屏幕大小。
  • 声明App需求一个最小化可用的屏幕宽度至少为600dp。

 

第一种方法执行与android3.1或者更老的版本,因为这些设备是基于四种传统的屏幕大小后缀。而第二种方法requiresSmallestWidthDp属性是为支持android3.2和更高的版本,因为这是新版本的特性。

 

 

为了支持requiresSmallestWidthDp 你可能需要在android 3.2或者更高的android版本中编译它们。但在老版本中是没有这个属性的,它们会在编译时报错。所以我们新建工程的时候要选择

android3.2,并在manifest中使用minSdkVersion指定最小的SDK版本。这样的话,android比3.2还老的版本会忽略那个属性,所以就不会有运行时失败的风险。

 

警告: 如果使用 <supports-screens> 节点并设置large 屏幕的属性为false的话,那android market不会过滤large屏幕哦。你的App仍然可以被large屏幕的设备安装,但执行时他不会适应

屏幕。系统会模拟手机屏幕来显示。如果你想要阻止app被large屏幕的设备下载。请使用上面关于手机的<compatible-screens>节点。所以我们最好结合<compatible-screens>和<supports-

screens>。

根据不同的屏幕发布多个apk

虽然理论上建议只发布一个Apk,但在android market上徐云发布多个功能一摸一样的Apk,只为了指定不同的屏幕。例如,如果你想要发布手机和平板两2个版本,这样你应该发布两2个Apk让用户选择。但使用一个Apk还是可以达到同样的功能的。

屏幕兼容模式

 

图1. 在android3.2平板上用兼容模式运行的一个App

图2. 和图1同样的App,但兼容模式关闭掉了

注意: 如果你已经开发了一个android3.0版的App,但它可能会为更大的屏幕(例如平板)调整布局,为了最好的用户体验,你应该关闭兼容模式。这一节就是我们需要的讲的内容

屏幕兼容模式是不能在大屏幕上适当调整的。在android1.6开始,就已经支持各种各样的屏幕大小并会自动调整App的布局以让它们适应每一个屏幕。但是你的App如果没有顺利的参考上一

篇的内容,那么在大屏幕上它可能会偶尔遇到显示问题。为了解决这个问题,屏幕兼容模式会让你的App能有多一点的机会用在大屏幕上。

有两种屏幕兼容模式,它们稍微有些不同:

版本1 (Android 1.6 - 3.1)
系统绘制App的UI就想在邮票窗口里绘制那样。系统绘制App的布局会使用黑边填充屏幕剩余的区域。

在1.6就引入了屏幕兼容模式这个概念,并且那时候仅为320dp*480dp的原始屏幕而设计(非常关键的一点,你有没有发现平板的密度都是mdpi的)。因为有一些老旧的设备执行于android1.5上,并且这个版本可能在将来的不久被废弃掉

关闭屏幕的兼容模式,你只要简单的设置android:minSdkVersionandroid:targetSdkVersion为4或者更高,还或者设置android:resizeable="true"就OK了。

版本2 (Android 3.2 或更高)
系统绘制App的UI会基于默认的尺寸(320dp*480dp)填满屏幕。本质上就像一个"zoom"会放大你的布局,这通常会使你的某些控件模糊。

引入版本2的模式是为了在android3.2或者更高的平板上,帮助你的App即使没有实现上篇讲的内容也能能平板上运行。

大体上,执行于android3.2或更高版本的大屏幕设备允许用户打开屏幕兼容模式,当App没有在manifest 中明确的声明它支持大屏幕时。在这种情况下,一个图标会出现在系统栏的时钟旁边,用户可以选择屏幕兼容模式开或者关(如图3)。如果一个App明确的声明它不支持大屏幕,那么屏幕兼容模式会一直打开,用户不能关闭它

Figure 3. 弹出一个屏幕兼容模式的开关.

作为一个开发者,当App使用屏幕兼容模式时我们有控制权。对于运行在android3.2或以上的大屏幕设备,下面的内容会教我们怎么关闭或者打开屏幕兼容模式,选择权在于你。

 

关闭屏幕兼容模式

 

如果你的APP的目标主要是低于android3.0的,但为了防止有可能我们的App会运行到平板上,我们应该关闭它。因为用户打开兼容模式后效果可能不太理想。

 

默认的, 在android3.2或更高版本上屏幕兼容模式会提供给用户一个选择。只要满足以下的其中一个条件

 

  • 你的App设置android:minSdkVersion and android:targetSdkVersion"10"或者更小的数字(要参考api level),并且没有明显的声明它支持大屏幕(<supports-screens> 节点中不要声明它)
  • 你的App设置android:minSdkVersion and android:targetSdkVersion"11"或者更高的数字(要参考api level) 并且在<supports-screens>节点中声明了它,但值为false(例如
     android:largeScreens="false")

 

完全的关闭屏幕兼容模式的用户选项并移除那个图标,我们可以按照下面的方法做:

 

  • 最简单的:

    在manifest 中,添加 <supports-screens>节点并指定android:xlargeScreens为true

    <supports-screens android:xlargeScreens="true"/>
    复制代码

    它声明了你的App支持所有的大屏幕,系统就会一直调整布局来适配屏幕。它忽略<uses-sdk>属性。

  • 简单并还有其他的效果:

    在 manifest' <uses-sdk> 节点下, 设置 android:targetSdkVersion 为"11"或更高:

    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="11"/>

    就是说你的App支持android3.0并也可以为大屏幕的设备工作。

    如果屏幕兼容模式在你改变了上面的设置后还是打开的,那么你就需要检查manifest中的<supports-screens>节点了,确定它没有设置为false。

 

打开屏幕兼容模式

 

当我们的App目标位android 3.2或更高时,我们能使用<supports-screens>节点来设置某些屏幕开打它的兼容模式。

 

 

 

  • 在manifest 中, 添加<supports-screens>节点并指定android:compatibleWidthLimitDp为“320”
    <supports-screensandroid:compatibleWidthLimitDp="320"/>
    这表明,最大的“最小屏幕宽度为你的应用程序设计320dp。这样一来,只要有一个设备的其中某一个比较小的边只要大于320dp就将提供屏幕兼容模式,并为用户可选功能。

    注意: 当前屏幕兼容模式只模拟320dp的宽度,如果你的android:compatibleWidthLimitDp大于320,它就不适应其他设备了。

  • 如果你想强制用户使用兼容模式,那么你就可以使用android:largestWidthLimitDp值。
    <supports-screensandroid:largestWidthLimitDp="320"/>
    复制代码

    看起来好像都是打开兼容模式,但区别在于largestWidthLimitDp是不允许用不关闭的,compatibleWidthLimitDp可以允许用户关闭

原创粉丝点击