Xml文件里Activity标签属性

Xml文件里Activity标签属性

 

 

<activity>

 

包含在:

<application>

 

能包含:

<intent-filter>
<meta-data>

 

 

描述:

         声明一个Activity(一个Activity子类),用来实现app的可见用户接口部分。所有的Activity都必须表现成manifest文件的<activity>元素。任何没有声明在manifest文件里的Activity将不会被系统看见,并且将永远不会运行。

 

属性:

         android:allowTaskReparenting

    当这个任务是下一个要带到前台的, activity是否能从它启动的任务移动到跟它有密切关系的任务里。--“true”它能移动,“false”它必须属于启动它的那个任务。

 

如果这个属性没有被设置,相应被设置在<application>元素里的allowTaskReparenting属性将适用于activity。默认值是“false”。

 

通常当一个activity被启动,它就被关联到启动这个activity的activity的任务里,并且整个生命周期都在那里。你能用这个属性来促使这个activity被重新定义到跟它有密切关系的任务里,在它的当前任务不再被显示时。典型地,它被用来引起一个app的activity被移动到这个app关联的主任务里。

 

例如,如果一个email消息包含一个网页链接,点击这个链接将会带来一个显示这个网页的activity。这个activity是被那个浏览器app定义的,但是它被启动作为email任务的一部分。如果这个activity被重定义在浏览器任务里,它将在浏览器任务下次来到前台时显示,并且在email再次来到前台时,它将不存在。

 

Activity的密切关系通taskAffinity属性定义。一个任务的密切关系是通过读取它的根activity的密切关系属性来决定的。因此,通过定义,一个根activity总是在具有相同密切关系的任务中。因为启动模式为“singleTask”或“singleInstance”的activity只能作为一个任务的根,重定义行为被限制在“standard”和“singleTop”模式里(也可以看启动模式属性)。

 

    android:alwaysRetainTaskState

       activity所在的任务的状态是否将一直被系统保持—“true”被保持,

    “false”允许系统在某些情况下重置它到它的初始状态。默认值是“false”。

    这个属性只对一个任务的根activity有意义。在其他activity是被忽略的。

   

通常,当用户从HOME屏幕重新选择任务,系统会在某些情况下清理一个任务(移除所有来自于根activity上的栈的activity)。典型地,如果用户在一段时间内还没有访问这个任务,比如30分钟,那么系统就会清理这个任务。

 

然而,当这个属性是“true”时,用户将总会返回到那个任务的最后一个状态,无论他们如何到达这里。这是有用的,例如,在一个像浏览器这样的app里,有大量的状态(比如打开的多个标签)用户不想要丢弃。

 

android:clearTaskOnLaunch

每当任务从HOME屏幕重启时,是否所有activity被从任务移除,除了根activity—“true”任务总是被剥离到它的根activity, “false”不会剥离。默认值是“false”。这个属性只对启动一个新任务的activity(根activity)有意义。对于任务里的其他activity是被忽略的。

 

当这个值是“true”时,每次用户再次启动任务时,他们都会被带到这个任务的根activity里,无论它们最后在任务里做了什么,并且无论他们用back键或HOME键离开任务。当这个值是“false”,在一些情况下,任务有可能会被清除activity,但不总是。

 

假设,例如,某人从Home屏幕启动activity P ,并且从这个activity到activity Q。用户下次按下Home键,会返回到activity P。通常,用户想要看到activity Q,因为他最后是正在做activity P的任务。然而,如果P设置这个标记为“true”,所有在这个activity以上的activity(在 这个case里是Q)将会被移除,在用户按下Home键并且这个任务准备去后台时。那样用户在返回任务时就只能看到activity P了。

 

如果这个属性和allowTaskReparenting都被设置为“true”,任务能被重定义的activity都被移动到跟它们共享密切关系的任务里。剩余的activity就会被扔掉,就像上面描述的那样。

 

         Android:enabled

         Activity是否能被系统实例化 – “true”能被实例化,“false”不能。默认是“true”。

 

         <application>元素有自己的enabled属性,并且提供给所有application的组件,包括activity。对于系统来说,想要能实例化一个activity,<application>和<activity>属性必须都是“true”。如果任何一个是“false”,这个activity就不能初始化。

 

Android:excludeFromRecents

         是否这个activity开始的任务应该被从最近使用的app列表(“最近的app”)排除。当这个activity是一个新任务的根activity时,这个属性决定任务是否出现在最近的app列表里。如果这个任务应该被从列表排除,就设置“true”。如果这个任务应该被包含,就设置为“false”。默认值是“false”。

 

Android:exported

         一个activity是否能被其他app的组件启动– “true”能,“false”不能。如果是“false”,这个activity只能被相同app的组件启动,或者是相同user ID的app的组件启动。

 

         默认值依赖于activity是否包含intent过滤器。任何过滤器的缺席意味着这个activity只能被准确的类名调用。这意味着这个activity只被打算在app内部使用(因为其他app不知道类名)。所以在这个case下,默认值是“false”。在另一方面,至少一个过滤器的出席意味着这个activity打算被外部使用,所以默认值是“true”。

 

         这个属性不是唯一一种限制activity暴露给其他app的方法。你也能用权限来限制外部实体调用activity(看permission属性)。

 

Android:finishOnTaskLaunch

         无论何时用户再次启动他的任务(从Home屏幕选择这个任务),一个已存在的activity实例是否应该被关闭– “true”他应该被关闭,“false”不应该被关闭。默认值是“false”。

 

         如果这个属性和allowTaskReparenting属性都是“true”,这个属性优先于其他。Activity的密切关系被忽略。这个activity不会被重新定义,只是会被销毁。

 

Android:hardwareAccelerated

         是否为这个activity启用硬件加速渲染 – “true”启用 ,“false”不启用。默认值是“false”。从Android 3.0 开始 , 一个硬件加速OpenGL渲染器对app来说是可用的,为了改善常用的2D图形操作的性能。当硬件加速渲染器是启用的,许多在画布,油漆,渡模式,颜色过滤器,图形,和摄像的操作都是加速的。这会导致平滑的动画,平滑的滚动,并且改善整体响应性,甚至对于那种没有显式使用OpenGL库框架的app。因为增加资源需要启用硬件加速,你的app将会消耗更多RAM。

 

         注意不是所有的OpenGL 2D操作都是被加速的。如果你启用了硬件加速渲染器,测试你的app,保证它能无错调用渲染器。

 

Android:icon

         一个图标代表一个activity。当一个activity的代表被需要在屏幕上时,这个图标就会被显示给用户。例如,启动任务的activity的图标被显示在启动窗口上。这个图标经常伴随一个标签(看 Android:label属性)。

         这个属性必须被设置为一个包含图片定义的可画资源的引用。如果没有设置,代替的,这个图标会指定app作为一个整体来使用(看<application>元素的图标属性)。

 

         这个activity的图标 – 是在这设置或者通过<application>元素设置 – 也是所有activity的intent过滤器的默认图标(看<intent-filter>元素的图标属性>)。

 

Android:label

         一个用户可读的activity的标签。当activity必须被表现给用户时,这个标签被显示在屏幕上。它经常伴随着activity图标显示。

 

         如果这个属性没有被设置,代替的,这标签设置app的属性作为整体使用。(看<application>元素的label属性)。

 

         这个activity的标签 – 设置在这或者通过<application>元素设置 – 默认也是所有activity的intent过滤器的标签(看<intent-filter>元素的label属性)。

 

         这个标签应该被设置为一个string资源的引用,所以它能像其他string那样在用户接口中定位。然而,作为一个你开发app时的便利,你也能直接设置一个string。

 

Android:multiprocess

         一个activity的实例是否能被启动在启动它的那个组件的进程里 – “true”能,“false”不能。默认值是“false”。

 

         通常,一个activity的新的实例会被启动在定义它的那个app的进程里,所以这个activity的所有实例都运行在同一个进程里。然而,如果这个标记设置为“true”,activity的多个实例能运行在多个进程里,无论它们被用在何处,都允许系统创建实例(被提供权限允许的),几乎没有必要或需要的东西。

 

Android:name

         实现activity的类的名字,这是一个activity的子类。这个属性值应该是一个完全限定的类名(比如,"com.example.project.ExtracurricularActivity")。然而,作为一个简写,如果名字的第一个字符是一个“.”(例如,".ExtracurricularActivity"),它会被追加一个包名,这个包名是通过<manifest>元素指定的。

 

一旦你发布你的app,你就不应该再改变这个名字(除非你设置android:exported="false")。

 

这个属性没有默认值,这个名字必须被指定。

 

Android:noHistory

       当用户离开这个activity并且这个activity不再显示在屏幕上时,这个activity是否会从activity栈被移除并且销毁– “true”它将会被销毁,“false”不会被销毁。默认值是“false”。

 

一个“true”值意味着activity不会留下历史痕迹。它将不会为任务保留activity栈,

以用户将不能返回到这个activity。

这个属性在api等级3被引进。

 

Android:parentActivityName

         Activity的逻辑父类的类名。这里的名字必须匹配相应由<activity>元素的android:name属性提供的类名。

 

         系统读取这个属性,用来决定当用户按下action bar上的UP按钮时,哪个activity应该被启动。系统也能使用这个信息来合成一个activity的退出栈,使用TaskStackBuilder。

 

         为了支持api等级 4 -16 ,你也能声明一个父activity,使用一个<meta-data>元素,这个元素指定一个"android.support.PARENT_ACTIVITY"的值。比如:

<activity
    android:name="com.example.app.ChildActivity"
    android:label="@string/title_child_activity"
    android:parentActivityName="com.example.myfirstapp.MainActivity">
    <!-- Parent activity meta-data to support API level 4+ -->
    <meta-data
       android:name="android.support.PARENT_ACTIVITY"
       android:value="com.example.app.MainActivity" />
</activity>

 

更多关于声明父activity来支持UP导航的信息,请读Providing UpNavigation。

这个属性被引入在api等级16.

 

Android:permission

         一个权限的名字,这个权限是客户端必须不得不启动activity,或以其他方式获取这个权限,用来响应一个企图。如果一个startActivity()或startActivityForResult()调用没有被授予指定权限,它的intent将不会被递交给那个activity。

 

         如果这个属性没有被设置,被<application>元素的permission属性设置的权限就会提交给activity。如果还没有属性被设置,这个activity就不会被一个权限保护。

 

         更多关于权限的信息,看那个Permissions章节里的说明和其他文档,Securityand Permissions。

 

Android:process

         那个activity运行的进程的名字。通常,一个app的所有组件运行在一个默认为app创建的进程上,并且你不需要使用这个属性。但是如果有必要,你能覆盖掉默认的进程名,使用这个属性,允许你在多个进程中传播你的app组件。

 

         如果分配给这个属性的名字以一个冒号(‘:’)开始,一个新进程,专门给app使用,在这个app被需要的时候被创建,并且activity运行在这个进程上。如果进程名以一个小写字符串开始,那么activity将会运行在这个名字指定的全局进程上,如果他有许可这么做。这允许在不同app上的组件共享一个进程,减少资源的使用。

 

这个<application>元素的process属性能设置一个不同的默认进程名,为所有组件。

 

Android:screenOrientation

         Activity的显示在设备上的方向。

         这个值能为下边所列的字符串的任何一个:

         “unspecified”

         默认值。系统选择方向。系统选择策略,因此这个选择产生在特定环境下,有可能设备和设备不同。

 

“behind”

         和在activity栈里直接在其下方的activity相同方向。

 

“landscape”

         横向方向(它的显示是宽大于它的高)。

 

“portrait”

         纵向方向(它的显示是高大于它的宽)。

 

“reverseLandscape”
         从正常横向相反的方向的横向方向。被增加在api等级9 。

 

“reversePortrait”

         从正常纵向相反的方向的纵向方向。被增加在api等级9 。

 

“sensorLandscape”

         横向,但是基于设备传感器能是正常横向或者反向横向。被增加在api等级9 。

 

“sensorPortrait”

         纵向,但是基于设备传感器能是正常纵向或者反向纵向。被增加在api等级9 。

 

“userLandscape”

横向方向,但是基于设备传感器和用户的传感器偏好能是正常横向或者反向横向如果用户已经锁定了基于传感器的旋转,这就表现的和属性:landscape一样了,否则他就表现的和属性:sensorLandscape一样了。被增加在api等级18 。

 

         “userPortrait”

纵向,但是基于设备传感器和用户的传感器偏好能是正常纵向或者反向纵向。如果用户已经锁定了基于传感器的旋转,这就表现的和属性:portrait一样了,否则,它就表现的和属性:sensorPortrait一样了。被增加在api等级18 。

 

         “sensor”

这个方向被设备方向传感器决定。显示的方向依赖于用户如何持有设备。当用户旋转设备时它会改变。虽然一些设备默认将不会旋转所有四个可能的方向。为了允许所有四个方向,使用属性“fullSensor”。

 

         “fullSensor”

这个方向被设备方向传感器决定为任何四个方向之一。这个属性很像属性:“sensor”,除了这个属性允许任何四个可能的屏幕方向,无论设备正常将会做什么(例如,一些设备正常不会使用反向纵向或者反向横向,但是这个属性能启用它们)。被增加在api等级9.

 

         “nosensor”

这个方向不会被一个物理方向传感器决定。传感器会被忽略,所以显示将不会基于用户如何移动设备而旋转。除了这个区别,系统选择方向使用和属性:”unspcified”相同的策略。

 

         “user”

                   用户当前偏爱的方向。

 

         “fullUser”

如果用户已经锁定了基于传感器的旋转,这个就表现的和属性:user一样了,否则这就表现为和属性:fullSensor一样并且允许任何四个可能的屏幕方向。被增加在api等级18.

 

         “locked”

                   锁定当前旋转的方向,无论它是什么。被增加在api等级18 。

 

注意:当你声明了一个横向或者纵向的值,它就被认为是一个硬请求,对于正在运行的activity的方向来说。像这样,你声明的值使被服务过滤成为可能,比如Google Play这样的服务,所以你的app只适用于支持你的activity需要的方向的设备。例如,如果你声明”landscape”,”reverseLandscape” ,或者”sensorLanscape”, 那么你的app将只适用于支持横向方向的设备。然而,你也应该显式声明你的app需要纵向或者横向方向,通过<users-feature>元素声明。例如,         <uses-featureandroid:name="android.hardware.screen.portrait"/> 。这纯粹是一个被Google Play提供的过滤行为并且平台自己不会控制你的app是否能安装,在一个设备只支持某个方向时。

 

android:configChanges

      列出Activity将会自己处理的配置改变。当一个配置改变发生在运行时,Activity默认会被停止并且重启,但是用这个属性声明一个配置将会阻止Activity被重启。代替的,Activity保持继续运行并且它的onConfigurationChanged()方法会被调用。

      注意:使用这个属性应该被避免,并且只用作最后一招。请阅读HandlingRuntime Changes的更多信息,关于如何适当处理一个配置改变引起的重启。

     

      任何或所有下面的字符串都是这个属性的有效值。多个值用‘|’分割-例如,"locale|navigation|orientation"。

“mcc”

      IMSI移动国家编码改变 – 一个SIM被检测到并且更新MCC。

“mnc”

   IMSI移动网络编码改变– 一个SIM被检测到并且更新MNC。

“locale”

   区域设置改变– 用户已经选择一种新语言,用来显示文本的。

“touchscreen”

   触摸屏幕被改变。(正常这个应该不会发生)

“keyboard”

   键盘类型改变– 例如,用户已经塞入一个扩展键盘。

“keyboardHidden”

   键盘可访问性改变– 例如,用户已经显示硬件键盘。

“navigation”

   导航类型(轨迹球/dpad)改变。(这个正常应该不会发生)

“screenLayout”

   屏幕布局改变– 这可能被一个不同的显示被激活引起。

“fontScale”

   字体缩放因素改变– 用户选择了一个新的全局字体尺寸。

“uiMode”

用户接口模式改变– 当用户将设备放到一个桌面或车上,或者当夜晚模式改变时,这个属性能被引起。

“orientation”

屏幕方向改变– 用户已经旋转设备。注意:如果你的app目标api等级是13或者更高(就像通过minSdkVersion和targetSdkVersion声明一样),你应该也声明“screenSize”配置,因为当一个设备在纵向和横向切换时,这个属性也会改变。

“screenSize”

当前可用的屏幕尺寸改变。这代表有一个改变在当前可用的尺寸上,相对于当前的纵横比,所以当用户切换横向与纵向时,它会被更改。然而,如果你的app目标的api等级是12或者更低,那么你的Activity总是自己处理这个改变(这个配置改变不会重启你的Activity,设置在运行在Android3.2或者更高的设备上)。

这个属性在api等级13被增加。

“smallestScreenSize”

物理屏幕尺寸改变。这代表着一个尺寸的改变,无论方向,所以当真实物理屏幕尺寸改变就像切换到一个额外的显示那样,它就会改变。一个这个配置的改变相当于一个smallestWidth配置的改变。然而,如果你的app目标api等级是12或者更低,那么你的Activity总会自己处理这个配置改变(这个配置改变不会重启你的Activity,甚至在运行在Android3.2或更高的设备上)。

这个属性在api等级13被增加。

“layoutDirection”

  布局方向改变。例如,从左到右改为从右到左。这个属性在api等级17增加。

 

所有这些配置改变都能影响到app能看到的资源值。因此,当你ConfigurationChanged()被调用时,它通常需要再次恢复所有资源(包括view布局,图片,等等)来正确处理改变。

 

 


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值