Android基础知识之屏幕兼容模式
原文:http://android.eoe.cn/topic/android_sdk
注意:如果你在低于安卓3.0的版本上进行应用开发,但其在更大屏幕的设备(比如平板电脑)上显示正常时,你就需要禁用屏幕兼任模式来保持最佳用户体验。要学习如何快速禁用用户选项,请跳转至禁用屏幕兼任模式。
屏幕兼任模式是一种改善方法,用于不能正常适配大屏设备(如平板电脑)的情况。从安卓1.6开始,系统就能支持多种屏幕尺寸,并且调整应用布局的显示,来适应每一款屏幕。然而,如果在支持多种屏幕Supporting Multiple Screens的指引下,你的应用仍不能成功适配屏幕,其问题就很有可能就出在适配更大屏幕上。对于存在这种问题的应用,屏幕兼任模式可以让其在更大屏设备上得到改善。
目前有两个版本的屏幕兼任模式,它们稍有不同:
版本一(安卓1.6-3.1)
系统将应用UI显示为“邮票”式窗口。即,系统将应用的布局认定为适应普通尺寸手机(模拟320dp x 480dp的屏幕),窗口以外的屏幕部分显示为黑色背景。
该版本随安卓1.6的产生而出现,安卓1.6的设计就是仅适用于320dp x 480dp的原始尺寸。因为现在安卓1.5的设备很少使用了,几乎所有应用都在安卓1.6或更高的平台上开发,所以应该不会有版本一的屏幕兼任模式来适配更大屏幕。该版本差不多已经过时了。
http://developer.android.com/images/screens_support/compat-zoom-thumb.png
图1. 在安卓3.2平板电脑上,应用以屏幕兼任模式运行的情况。
http://developer.android.com/images/screens_support/compat-stretch-thumb.png
图2. 图1中的应用,在禁用屏幕兼任模式下的运行情况。
要禁用该版本的屏幕适配模式,你只需要设定android:minSdkVersion或android:targetSdkVersion至 “4”或更高,或设置android:resizeable至“true”。
版本二(安卓3.2或更高)
系统按照在普通屏幕手机上的显示方式(大致模拟320dp x 480dp的屏幕)显示应用,然后进行放大,填满屏幕。实际上就是“拉大”应用布局,这通常会引起UI的伪迹或像素丢失。
该版本随着安卓3.2的产生而出现,在应用还没有实施支持多种屏幕Supporting Multiple Screens中所提及的技术时,该版本起到了进一步支持应用在最新设备上的正常显示的作用。
这样屏幕兼任模式就能一直启用,用户不可禁用。(下面的章节将会讨论如何声明支持大屏幕)。
http://developer.android.com/images/screens_support/compat-toggle.png
图3. 开关屏幕适配模式的弹出菜单(当前为禁用状态,仅正常调整)。
作为开发者,你应该掌握在何时该使用屏幕兼任模式。以下章节将告诉你,在安卓3.2或更高版本下,如何选择禁用或启用屏幕兼任模式来适配更大屏幕。
禁用屏幕兼任模式
如果你的应用最初是为低于3.0的版本开发的,而它能在更大屏幕上正常显示,那么你就应当禁用屏幕兼任模式,从而保证最佳用户体验。否则,用户也许会启用屏幕兼任模式,这样就会影响最佳的应用体验效果。
在默认下,当一下可选特性之一为true时,3.2或更高版本设备的屏幕兼任模式将可用:
· 将应用中android:minSdkVersion和android:targetSdkVersion同时设为"10"或更低,并且使用元素,* 不要声明* 支持大屏。
· 将应用中 android:minSdkVersion或android:targetSdkVersion二者之一设定文"11"或更高,并且使用元素,* 声明其不支持* 大屏。
要想完全禁用屏幕兼任模式的用户选项并且移除系统栏上的图标,你可以:
- ·最简单:*
在清单文件中,添加元素,指定android:xlargeScreens属性为“true”;
就这么简单。这样就声明了你的应用支持所有大屏幕尺寸,系统也会根据屏幕调整布局。不论你在属性中设定了什么值,它都会起作用。
- ·简单,但有其他效果:*
在清单的元素中,设定android:targetSdkVersion为“11”或更高:
这种方法可声明应用支持安卓3.0,并且可以在更大屏幕(平板电脑等)上起作用。
谨慎:3.0或更高版本上,该方法也可启用UI的全息主题,启用时将在Activity上添加Action Bar,且移除系统栏上的选项菜单按钮。
如果在你改变此处以后,屏幕兼任模式仍然启用,请检查清单中的,确认其中没有设定为“false”的属性。最佳做法是使用元素,声明其支持不同屏幕尺寸,这样你就可以一直使用该元素了。
关于针对安卓3.0设备升级应用的更多信息,请见Optimizing Apps for Android 3.0.
启用屏幕兼任模式
当应用针对安卓3.2(API等级13)或更高时,你可以使用元素,针对某些屏幕启用或禁用屏幕兼任模式。
注意:屏幕兼任模式并不是一种最佳的选择——他会因缩放而导致UI的像素丢失和虚化。让应用在大屏手机上正常显示的最佳方法,请参见支持多种屏幕,并且为不同屏幕尺寸提供替换性选择。
在默认下,当设定android:minSdkVersion或android:targetSdkVersion二者之一为“11”或更高时,屏幕兼任模式将对用户不可用。若二者之一为true,且应用不能针对大屏进行适当调整时,你选择以下一种方式,来启用屏幕兼任模式:
·在清单文件中,添加 元素并且指定android:compatibleWidthLimitDp属性为“320”:
这表明,该应用“最小屏幕宽度”的最大值为320dp。通过该方法,任何大于此值的最小屏幕值都可将屏幕兼任模式设为用户的可选特性。
注意:现今,屏幕兼任模式进模拟屏幕为320dp宽,所以,如果android:compatibleWidthLimitDp的值大于320,屏幕兼任模式将不会在任何设备上启用。
·如果应用在针对大屏调整时出现功能性崩溃,所以你想强迫用户使用屏幕兼任模式(而不仅仅是提供这个选项),你可以使用android:largestWidthLimitDp属性。
这个属性和android:compatibleWidthLimitDp效果一样,除了强制启用屏幕兼任模式而不允许用户禁用。
Android基础知识之屏幕兼容模式的更多相关文章
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- Android基础知识之API等级介绍
原文:http://android.eoe.cn/topic/android_sdk :可以让开发者通过一个表示API级别的整数来描述程序在android平台上的兼容性,系统会将与系统本身提供的API ...
- Android基础知识(一)
前言 前言 从软件测试最终目的发现问题缺陷来看,Findyou比较认同一个观念,测试的能力大致可以划分成三个能力层次:发现问题.定位问题.预防问题.有机会探讨一下这个分类. 发现问题各种方式方法,比如 ...
- Android基础知识总结
四大组件之一活动 活动状态 运行状态:活动处于栈顶 暂停状态:活动不处于栈顶,但仍然可见 停止状态:完全不可见 销毁状态:离开返回栈 生存期 onCreate() onStart():不可见到可见调用 ...
- FTP基础知识 FTP port(主动模式) pasv(被动模式) 及如何映射FTP
您是否正准备搭建自己的FTP网站?您知道FTP协议的工作机制吗?您知道什么是PORT方式?什么是PASV方式吗?如果您不知道,或没有完全掌握,请您坐下来,花一点点时间,细心读完这篇文章.所谓磨刀不误砍 ...
- Android基础知识巩固:关于PendingIntent和广播
平时使用广播的场合比较多,但细节的东西,看过了也没有总结,以至于某些场合有小问题,还是要把原理和属性搞清楚才能运用自如. 其实也是自己比较懒,先看别人的blog,有个概念再去官网看英文的能好理解一些. ...
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- Android基础知识06—活动的四大启动模式
------ 活动的启动模式 ------ 在实际项目中应该根据特定的需求为每个活动指定恰当的启动模式. 四种启动模式: standard . singleTop . singleTask . sin ...
- android基础知识13:AndroidManifest.xml文件解析
注:本文转载于:http://blog.csdn.net/xianming01/article/details/7526987 AndroidManifest.xml文件解析. 1.重要性 Andro ...
随机推荐
- Laravel中pluck的使用——返回指定的字段值信息列表
$model = self::where(['is_delete' => 0, 'is_on_sale' => 1]) ->whereIn('goods.cat_id', Goods ...
- Android插件化开发之解决OpenAtlas组件在宿主的注冊问题
OpenAtlas有一个问题,就是四大组件必须在Manifest文件里进行注冊,那么就必定带来一个问题,插件中的组件都要反复在宿主中注冊.像Service,ContentProvider等组件眼下没有 ...
- 分享自己针对Automation做的两个成熟的框架(QTP 和Selenium)
自己在google code中开源了自己一直以来做的两个自动化的框架,一个是针对QTP的一个是针对Selenium的,显而易见,一个是商业的UI automation工具,一个是开源的自动化工具. 只 ...
- OpenCV学习代码记录—— Snake轮廓
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- Spring Cloud开发实践 - 02 - Eureka服务和接口定义
服务注册 EurekaServer Eureka服务模块只有三个文件, 分别是pom.xml, application.yml 和 EurekaServerApplication.java, 内容如下 ...
- 【TP5.0】model的操作方法
tp5 中 model 的新增方法 //默认主键为自动识别,如果需要指定,可以设置属性: namespace app\index\model; use think\Model; class User ...
- git clone时RPC failed; curl 18 transfer closed with outstanding read data remaining
git clone时报RPC failed; curl 18 transfer closed with outstanding read data remaining 错误 原因1:缓存区溢出 解决方 ...
- (原)tensorflow中函数执行完毕,显存不自动释放
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7608916.html 参考网址: https://stackoverflow.com/question ...
- Mysql DBA 20天速成教程
Mysql DBA 20天速成教程 基本知识1.mysql的编译安装2.mysql 第3方存储引擎安装配置方法3.mysql 主流存储引擎(MyISAM/innodb/MEMORY)的特点4.字符串编 ...
- Rust 之 cargo(项目构建和包管理工具)
如果食用cargo来进行项目构建: 1. 执行 cargo new hello_cargo --bin ,执行完上面的操作之后,我们切换到hell_cargo目录下,可以看到一个文件(Cargo.to ...