<application>节点属性
1.android:allowBackup
它表示是否允许应用程序参与备份。如果将该属性设置为false,则即使备份整个系统,也不会执行这个应用程序的备份操作,而整个系统备份能导致所有应用程序数据通过ADB来保存。该属性必须是一个布尔值,或为true,或为false,其默认值为true。
2.allowTaskReparenting
android:allowTaskReparenting是任务调整属性,它表明这个任务重新被送到前台的时候,该应用程序所定义的Activity是否可以从被启动的任务中转移到有相同亲和力的任务中。
这个属性的数据类型是布尔型,它的取值只有true和false两种。它不是必须指定的属性,如果我们没有显示指定这个属性,那么它将被指定为默认值false。
<application>和<activity>节点上都有这个属性可以配置。如果将该属性配置在<application>节点上,并且没有在<activity>节点上配置的情况下,<application>节点上的值将会应用到每一个<activity>节点上。反之,如果<activity>节点上配置了这个属性,则以<activity>节点上的值为准。
3.android:killAfterRestore
这个属性是指在一个完整的系统恢复操作之后应用程序是否被终止。单个应用程序的恢复操作不会引起应用程序的终止。完整的系统恢复操作一般仅在手机首次安装时才会发生一次。第三方应用通常都不需要使用该属性。
该属性的默认值为true,意为在完整的系统恢复期间,应用程序在结束处理其数据之后将被终止。
4.android:restoreAnyVersion
它指是否允许恢复任意版本的备份数据来恢复应用程序的数据,即使备份明显来自于当前安装在设备上的应用程序的更新版本。将该属性设置为true,则将允许备份管理器尝试恢复操作,有的时候版本不匹配表明数据是不兼容的,这个时候如果可以恢复到不同版本的数据,那么应用程序将承受很大的风险,所以请谨慎使用此属性
它必须是布尔值,或为true,或为false,默认值为false。
5.android:debuggable
这是一个布尔型标志,它的取值是true或false,这个标志指示应用程序在用户模式的设备上是否可以调试。如果为true,则表示应用程序可以被调试;如果为false,则表示应用程序不可以被调试。它的默认值是false。使用这个标志唯一需要注意的是,它只在用户模式的机器上生效,用户模式既是买着用的android手机,而虚拟机一般都是工程模式。
当你创建一个项目的时候,一般这个属性没有配置,但它有默认值,为false。
6.android:description
这个属性是描述应用程序的,它是一个用户只读的文本,比应用程序标签android:label的描述更长,更详细。但需要注意的是,这里必须配置为一个字符串资源的引用,不能像应用程序标签那样设置为一个字符串。它没有默认值。
首先,我们要知道为什么Android要给这个限制(这里必须配置为一个字符串资源的引用),下面对比一下Android对android:label和android:description属性的差异:
<attr name="label" format="reference|string"/>
<attr name="description" format="reference"/>
上面两行代码是对这两个属性的定义,其中label的format为reference|string,这表示它支持资源引用和字符串两种格式,而description的format仅为reference,这表示当配置android:description属性时,它只能是一个引用。
7.android:enabled
默认情况下,Android系统会自行实例化每一个应用程序的组件,包括Android四大组件,但如果我们需要自己完成这些事情的话,就需要使用android:enabled属性来限制Android系统的行为。这个属性表明Android系统是否可以被实例化应用程序组件,如果其值为true,则说明应用程序组件可以被Android系统自动实例化;如果为false,则说明实例化组件的工作需要手工完成。该属性的默认值为true。每一个组件都可以单独定义自己的enabled属性。如果这个属性定义在<application>节点中,那么它会默认将每个组件的enabled属性设置为相同的值。如果每一个组件单独定义了这个属性,那么<application>节点上定义的属性对此组件不再生效,就由自己的enabled属性决定。
8.android:hasCode
该属性表明应用程序是否含有代码,若其值为true,表示应用程序含有代码,false则表示其中没有代码。该属性的默认值是true。当其值是false时,加载组件时系统不会尝试加载任何应用程序的代码。应用程序一般没有它自己的任何代码,除非它仅是由组件类构建而成的,比如Activity使用AliasActivity类,但这很少发生。
hasCode作为一个标志,被集成到包信息的flags标志中,以此来作为操作应用程序的参数,示例代码如下所示:
- if(sa.getBoolean(com.android.internal.R.sytleable.AndroidManifest
- Application_hasCode,true)){
- ai.flags|=ApplicationInfo.FLAG_HAS_CODE;
- }
从以上代码片段可以看出,这个标志被合到ai.flags的第3位上。
9.android:hardwareAccelerated
ndroid:hardwareAccelerated标志指示硬件加速渲染功能是否对应用程序中的所有Activity和View启用,如果启用,则为true,否则为false,其默认值是false。
从Android 3.0开始,硬件加速的OpenGL渲染器对所有应用程序都有效,这样做的目的是改善大多数2D图形操作的性能。当硬件加速渲染器被启用时,大多数操作(包括Canvas,Paint,Xfermode,ColorFilter,Shader和Camera)都会被加速,这样产生的结果是更顺滑的动画效果,更顺滑的滚动效果以及整体响应的改进。即使对于那些不能明确使用OpenGL库的应用程序,其结果也一样。
需要注意的是,不是所有的OpenGL操作都是被加速的。如果启用硬件加速渲染器,就要先测试应用程序以便确保它可以无误地使用渲染器。
对于Android框架来说,这个标志是这样被打包成信息的:
当没有设置这个标志的时候,它的默认值取决于是否配置了android:targetSdkVersion。如果没有配置,则Android默认将android:targetSdkVersion作为当前设备系统的SDK版本。当android:targetSdkVersion属性的值大于或者等于当前系统版本时,则启用硬件加速,反之则禁用硬件加速。
建议: 如果不打算设置hardwareAccelerated标志,则尽量配置<uses-sdk>节点,代码如下所示:
<uses-sdk android:targetSdkVersion="15">
10.android:label / android:icon
android:label和android:icon这两个属性分别是有关标签和图标的。先来看看android:label,它是Android标签属性,是应用程序全局的一个用户可读的标签,也是该应用程序所有组件的默认标签。在项目生成的时候,就已经定义了该属性,它可以是一个字符串资源的引用,也可以是一个字符串。能这么做的原因是该标签是这样定义的:
<attr name="label" format="reference|string">
此处,建议尽可以使用字符串资源的引用形式,因为这样可以更好地支持国际化特性。在应用程序标签被定义之后,它就会在诸如应用程序菜单,设置的应用程序信息等位置被使用,如下图的位置:
接下来,我们再来看看另一个属性android:icon,它是应用程序全局的一个图标,也是该应用程序所有组件的默认图标。这个属性在Android框架中是这样定义的:
<attr name="icon" format="reference">
可以看到,这里只能配置图片资源的引用,例如@drawable/icon。当我们配置了这个属性之后,它就会在应用程序菜单,设置的应用程序列表以及设置的应用程序详情界面中显示出来,通俗的说,就是应用程序图标。
11.android:logo
android:logo属性用于配置应用程序的商标。自Android3.0以后,应用程序窗口多了一个标题栏,而应用程序的logo将会出现在那里。对于Android框架而言,它是这样定义这个属性的:
<attr name="logo" format="reference">
这说明它能接受的只是一个图片资源的引用。配置这个属性后运行程序,会发现在启动的每一个界面上都会看到这个图标,如果同时设置了logo,icon,logo会覆盖掉icon的图标。
12.android:manageSpaceActivity
该属性是一个Activity子类的全名,用户使用它可以管理设备上该应用程序占有的内存。Activity也应该用<activity>元素声明。
13.android:permission
该属性是客户端与应用程序交互所必须拥有的许可名,它是给应用程序的所有组件设置许可的便捷方式,可以被组件各自的许可属性值所覆盖。
14.android:persistent
该属性用来表明应用程序是否应该在任何时候都保持运行状态,若为true,则表示应该,false则表示不应该,其默认值为false。通常,应用程序不应该设置本属性,而持续模式仅仅对于某些系统应用程序才有意义。
在实际应用中就存在这样的例子,例如电话模块,它在系统启动的时候就处于运行状态,这样电话状态发生变化时就会在系统产生相应的变化。如下面代码所示:
- <application android:name="PhoneApp"
- android:persistent="true"
- android:label="@string/phoneAppLabel"
- android:icon="@drawable/ic_launcher_phone"
- .....
- </applicaiton>
15.android:process
该属性是应用程序所有组件运行的进程名。每个组件都能够设置自己的进程属性,以此来覆盖原来的默认值。
该属性的默认值是当前的应用程序包名。当应用程序的第一个组件需要运行时,Android:就生成一个进程,所有的组件都将在该进程里运行。默认情况下,进程名与<manifest>元素里设置的包名相匹配。
该属性设置为一个与其他应用程序共享的进程名,就可以将两个应用程序的组件说运行在相同的进程里。能这样做的前提是仅在两个应用程序共享一个用户ID并且被赋予相同证书时。
如果该属性里设置的名字以冒号开头(:),那么在需要的时候它将生成该应用程序的一个私有新进程。如果进程名以小写字母开头,则生成以该进程名命名的一个全局进程。全局进程可以用来与其他应用程序分享,以便降低资源消耗。
如果配置下面的代码到新建的项目ApplicationTest里面,代码如下:
android:process=":test"
16.android:taskAffinity
它是应用程序所有Activity都适用的任务亲和力,除了那些将不同任务亲和力设置在自身taskAffinity属性里的Activity。我们可以这样理解这个属性:该Activity更喜欢待在哪个任务中。
对于不同版本的Android SDK来说,框架对该属性的处理是不一样的。
对于Android 2.2(Froyo)以后的版本,如果没有设置这个属性,则会采用默认值0,而之前的版本则不会提供默认值。
17.android:theme
android:theme属性为应用程序定义了一个整体风格。当开发一个商业应用程序时,风格是要考虑的重要因素之一。因此,为了保证应用程序的所有界面保持一定的风格标准,要尽量使用这个属性为应用程序定义风格。
android:theme属性是一个可以覆盖的属性。当我们需要对某个界面做一些特殊的处理时,只需要在对应的节点配置此属性,就可以覆盖掉应用程序配置的整体风格了。
对于框架而言,该属性不是必须配置的。如果没有配置,Android则会认为它的值为0,即无资源,如下代码所示:
ai.theme=sa.getResourceId(com.android.internal.R.styleable.AndroidManifestApplication_theme,0);
如果在<application>的某个子节点上配置了这个属性,那么框架将会覆盖整体风格而使用子节点上配置的风格:
a.info.theme=sa.getResource(com.android.internal.R.styleable.AndroidManifestActivity_theme,0);
现在我们举例说明如何使用这个属性。例如,给<application>节点增加android:theme属性,它的值指向Animation.Dialog的风格。相关代码如下:
android:theme="@android:style/Animation.Dialog"
需要注意的是,这里的@android:style表示此资源位于“android”的空间中,也就是SDK预定义的那些资源。
刚刚说到增加的theme属性指向Animation.Dialog风格,其中风格是这样定义的:
- <style name="Animation.Dialog">
- <item name=""windowEnterAnimation>@anim/dialog_enter</item>
- <item name="windowExitAnimation">@anim/dialog_exit</item>
- </style>
这里规定了进入和推出的动画效果。
除了使用SDK提供的风格资源以外,我们还可以使用自定义的风格资源,那么如何配置自定义风格呢?,大家可以按照下面的操作步骤自己动手实现。
①定义自己的风格资源。在工程res/value/目录下新建你的application_style.xml文件。
②打开刚刚创建的文件,加入如下代码:
- <?xml
- version="1.0" encoding="utf-8"?>
- <resources>
- <style name="myTheme">
- </style>
- </resources>
18.android:uiOptions
该属性用于开启Activity UI附加的扩展导航栏。在配置这个属性时,可供选择的值必须是下表所示的两个值中的一个。
值 |
描述 |
none |
关闭扩展栏。如果没有配置android:uiOptions属性,此为默认值 |
splitActionBarWhenNarrow |
当在横向空间受到限制时,比如当手机处于纵向模式,在屏幕底部添加一个状态栏来显示ActionBar中的动作项。只有少数的Action项会出现在动作栏中。操作栏将被分成顶部导航部分和用于动作项的底部栏。这就保证了有一个合理数量的空间可用。 |
需要说明的是,android:uiOption属性是自Android4.0以后才提供的。因此,在需要使用该属性的时候,孙弱保证使用Android4.0以后的SDK(API14)
下面举例说明如何使用这个属性。
①就拿刚刚新建的AppilcationTest项目来说,在Androidmanifest.xml中的<application>节点中加入如下代码:
- android:uiOptions="splitActionBarWhenNarrow"
②在工程的/res.menu目录下新建一个菜单配置文件my_menu_cfg.xml。在该文件中配置如下代码:
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/item1" android:title="show_item1" android:showAsAction="always|withText" android:icon="@drawable/abc_ic_menu_copy_mtrl_am_alpha"></item>
- <item android:id="@+id/item2" android:title="show_item2"></item>
- <item android:id="@+id/item3" android:title="show_item3" android:showAsAction="always|withText" android:icon="@drawable/abc_ic_menu_selectall_mtrl_alpha"></item>
- </menu>
需要注意的是,我们把要显示为Action项的菜单项的android:showAsAction设置为always。
③新建一个Activity类,名为UIOptionActivity,实现onCreateOptionsMenu()方法加载my_menu_cfg.xml菜单布局,代码如下:
- public class UIOptionActivity extends Activity{
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.my_menu_cfg,menu);
- return super.onCreateOptionsMenu(menu);
- }
- }
④编译运行项目,运行结果如下图。
可以发现,屏幕底部出现了状态栏。
这样刚刚配置的android:showAsAction的项目就显示出来了,剩余部分包含在框中的超出菜单里,单击它时才会显示出来。大家可以自行尝试一下去掉这个属性的效果。
在不需要操作栏的时候,只需要把andriod:uiOption设置为none或者onCreateOptionmenu()方法空实现。
19.android:vmSafeMode
此属性用于指示虚拟机是否在安全模式下运行,它是一个布尔值,当没有配置它的时候,其默认值为false。示例代码如下:
- if(sa.getBoolean(com.android.internal.R.styleable.AndroidManifestApplication_vmsafeMode,false)){
- ai.flags|=ApplicationInfo.FLAG_VM_SAFE_MODE;
- }
20.android:largeHeap
此属性指示应用程序是否使用一个比较大的堆创建,它是一个布尔值,在没有配置的情况下,它的默认值是false,示例代码如下:
- if(sa.getBoolean(com.android.internal.R.styleable.AndroidManifestApplication_largeHeap,false)){
- ai.flags|=ApplicationInfo.FLAG_LARGE_HEAP;
- }
至此,我们介绍完了<application>节点支持的所有节点的用法,代码实现,含义及用法。在开发应用程序的时候,开发者应该根据具体需求有选择的使用这些属性,以使应用程序更高效地运行。
要注意的是,作为应用程序的根节点,<application>节点必须包括在<manifest>节点中。
<application>节点属性的更多相关文章
- application节点
<application>节点是AndroidManifest.xml文件中必须持有的一个节点,它包含在<manifest>节点下.通过<application>节 ...
- java对xml节点属性的增删改查
学习本文之前请先看我的另一篇文章JAVA对XML节点的操作可以对XML操作有更好的了解. package vastsum; import java.io.File; import java.io.Fi ...
- DOM节点属性
节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType ...
- testng.xml文件结构组成及节点属性说明
TestNG的DTD检查文件:http://testng.org/testng-1.0.dtd.PHP 更多testng配置及说明,请移步http://testdoc.org/docmaster?pi ...
- js 节点属性
节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType ...
- 节点属性(DOM对象)
节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType ...
- javascript 节点属性详解
javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...
- Javascript进阶篇——(DOM—节点---属性、访问节点)—笔记整理
节点属性在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType : ...
- DOM 节点属性
DOM 节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeT ...
随机推荐
- 第一章、接口规范之Restful规范
阅读目录 2.1 数据的安全保障 2.2 接口特征表现 2.3 多数据版本共存 2.4 数据即是资源 2.5 资源操作由请求方式决定 3.1 正常响应 3.2 重定向响应 3.3 客户端异常 3.4 ...
- 014.存储过程(sql实例)
--存储过程--GO--先编译,再执行 --1.GO:批处理语句,GO之前作为一个批次发送服务器编译执行 USE master GO CREATE DATABASE TEST_DB GO USE TE ...
- linux常用的操作命令
---恢复内容开始--- 最近换了工作之后,需要管理linux服务器的日常运行和维护,自然linux命令是少不了的,切换目录,vim操作等的简单的操作就不说了,有些时候还需要查看日志和监控服务器启动进 ...
- java——OOM内存泄漏
资料: 一.什么是OOM OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个erro ...
- Django form表单修改数据
form: #!/usr/bin/env python #coding:utf8 from django.forms import Form,ModelForm import models class ...
- 搜索引擎选择: Elasticsearch与Solr(转载)
原文地址:http://www.cnblogs.com/chowmin/articles/4629220.html 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是 ...
- 埋点(Event Tracking)vs 无埋点(Codeless Tracking) vs 可视化埋点(Visual Event Tracking)
在理解什么是埋点之前,首先需要了解一些基础知识:(以下摘自:http://www.chinawebanalytics.cn/auto-event-tracking-good-bad-ugly/) 我们 ...
- 洛谷P1140 相似基因【线性dp】
题目:https://www.luogu.org/problemnew/show/P1140 题意: 给定两串基因串(只包含ATCG),在其中插入任意个‘-’使得他们匹配.(所以一共是5种字符) 这5 ...
- 12、redis部分
- [Javascript] Customize Behavior when Accessing Properties with Proxy Handlers
A Proxy allows you to trap what happens when you try to get a property value off of an object and do ...