Activity配置属性

Android4.2拨号盘Acitivity配置

   <activity android:name=".activities.DialtactsActivity"
            android:label="@string/launcherDialer"
            android:theme="@style/DialtactsTheme"
            android:uiOptions="splitActionBarWhenNarrow"
            android:launchMode="singleTask"
            android:clearTaskOnLaunch="true"
            android:icon="@mipmap/ic_launcher_phone"
            android:screenOrientation="nosensor"
            android:enabled="@*android:bool/config_voice_capable"
            android:taskAffinity="android.task.contacts.phone"
            android:windowSoftInputMode="stateAlwaysHidden|adjustPan">


android:label

     定义了每个title栏的名称,但是优先级低于activity中的setTitle()

android:theme

     主题style 系统自带分为两种,均可自定义主题
           parent="android:Theme.Holo">         暗色主题
           parent="android:Theme.Holo.Light">亮色主题

android:uiOptions

      屏幕空间过小时,AnctionBar分为上下两部分顶部用于导航选择,底部用于操作项目(例如拨号盘,联系人底部菜单一样)

android:launchMode


    1.standard       默认的启动模式 不管有没有已存在的Activity,都生成新的Activity

    2.singleTop     启动时在栈结构中寻找是否有一个Activity实例正位于栈顶,如果有则不再生成新的,而是直接使用

    3.singleTask    如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。

    4.singleInstance  它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入

android:configChanges

(这个很重要按下电源键横竖屏切换时Acitivity会重绘Bug)


     当配置list发生修改时, 是否调用 onConfigurationChanged() 方法 比如 "locale|navigation|orientation".
     举例:在按下power键时,直接在应用程序里onPause处理就好。当app是竖屏时,这样处理没问题。但是当app是横屏时,按下power 键,app会强制回到竖屏,并且会重新调用activity的onCreate。很多时候这不是预期结果,所以就会用到 android:configChanges。

     在配置文件里设置android:configChanges=”keyboardHidden|orientation”,这样在屏幕方向改变的时候就 不会重新调用activity的onCreate()方法,而是调用onConfigurationChanged(),然后在activity里面重在 下。



android:screenOrientation="nosensor"

"landscape"
- 橫向

"portrait"
- 纵向

"user"
- 用戶当前的首选方向

"behind"
- 与在活动堆栈下的活动相同方向

"sensor"
- 根据物理方向传感器确定方向. 取决于用戶手持的方向, 当用戶转动设备, 它跟隨改变.

"nosensor"
- 不经物理方向传感器確定方向. 该传感器被忽略, 所以当用戶转动设备, 显示不會跟隨改变. 除了这个区别,系統选择使用相同的政策取向对于“未指定”设置. 系統根据“未指定”("unspecified")设定选择相同显示方向.

android:allowTaskReparenting


      用法<application android:allowTaskReparenting="true/false"></application>
     是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务。用来标记Activity能否从启动的Task移动到有着affinity的Task(当这个Task进入到前台时)—— “true”,表示能移动,“false”,表示它必须呆在启动时呆在的那个Task里。

     如果这个特性没有被设定,设定到<application>元素上的allowTaskReparenting特性的值会应用到Activity上。默认值为“false”。

     一般来说,当Activity启动后,它就与启动它的Task关联,并且在那里耗尽它的整个生命周期。当当前的Task不再显示时,你可以使用这个特性来 强制Activity移动到有着affinity的Task中。典型用法是:把一个应用程序的Activity移到另一个应用程序的主Task中。

     例如,如果e-mail中包含一个web页的链接,点击它就会启动一个Activity来显示这个页面。这个Activity是由Browser应用程序 定义的,但是,现在它作为e-mail Task的一部分。如果它重新宿主到Browser Task里,当Browser下一次进入到前台时,它就能被看见,并且,当e-mail Task再次进入前台时,就看不到它了。

     Actvity的affinity是由taskAffinity特性定义的。Task的affinity是通过读取根Activity的affinity 决定。因此,根据定义,根Activity总是位于相同affinity的Task里。由于启动模式为“singleTask”和 “singleInstance”的Activity只能位于Task的底部,因此,重新宿主只能限于“standard”和“singleTop”模 式。

android:alwaysRetainTaskState


      用法<activity android:alwaysRetainTaskState="true/false"></activity>
     用来标记Activity所在的Task的状态是否总是由系统来保持——“true”,表示总是;“false”,表示在某种情形下允许系统恢复Task 到它的初始化状态。默认值是“false”。这个特性只针对Task的根Activity有意义;对其它Activity来说,忽略之。
     一般来说,特定的情形如当用户从主画面重新选择这个Task时,系统会对这个Task进行清理(从stack中删除位于根Activity之上的所有Activivity)。典型的情况,当用户有一段时间没有访问这个Task时也会这么做,例如30分钟。
     然而,当这个特性设为“true”时,用户总是能回到这个Task的最新状态,无论他们是如何启动的。这非常有用,例如,像Browser应用程序,这里有很多的状态(例如多个打开的Tab),用户不想丢失这些状态。

 android:taskAffinity="android.task.contacts.phone"

    每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task。如果一个Activity没有显式的指明该Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity,如果Application也没有指明,那么该taskAffinity的值就等于包名。而Task也有自己的affinity属性,它的值等于它的根Activity的taskAffinity的值。



android:clearTaskOnLanunch

   设置为true时,表示当跳转到其他Activity时,按Home键退出,在进入时永远保持第一个Ancitivity在前,例如拨号盘进入通话记录详情界面 ,Home键在进入时,不在通话记录详情界面,仍然是 DialtactsActivity界面,例如Settings中进入其他界面,Home键退出再进入时,仍然在主界面
      用法<activity android:clearTaskOnLanunch=”true/false”></activity>
      用来标记是否从Task中清除所有的Activity,除了根Activity外(每当从主画面重新启动时)——“true”,表示总是清除至它的 根 Activity,“false”表示不。默认值是“false”。这个特性只对启动一个新的Task的Activity(根Activity)有意义; 对Task中其它的Activity忽略。
      当这个值为“true”,每次用户重新启动这个Task时,都会进入到它的根Activity中,不管这个Task最后在做些什么,也不管用户是使 用 BACK还是HOME离开的。当这个值为“false”时,可能会在一些情形下(参考alwaysRetainTaskState特性)清除Task的 Activity,但不总是。
      假设,某人从主画面启动了Activity P,并从那里迁移至Activity Q。接下来用户按下HOME,然后返回Activity P。一般,用户可能见到的是Activity Q,因为它是P的Task中最后工作的内容。然而,如果P设定这个特性为“true”,当用户按下HOME并使这个Task再次进入前台时,其上的所有的 Activity(在这里是Q)都将被清除。因此,当返回到这个Task时,用户只能看到P。
     如果这个特性和allowTaskReparenting都设定为“true”,那些能重新宿主的Activity会移动到共享affinity的Task中;剩下的Activity都将被抛弃,如上所述。


android:enabled

     activity 是否可以被实例化
     用法:<activity android:enabled="true"></activity>

android:excludeFromRecents

     是否可被显示在最近打开的activity列表里
     用法:<activity android:excludeFromRecents="true"></activity>

android:exported

     是否允许activity被其它程序调用

android:finishOnTaskLaunch

     用来标记当用户再次启动它的Task(在主画面选择这个Task)时已经存在的Activity实例是否要关闭(结束)——“true”,表示应该关闭,“false”表示不关闭。默认值是“false”。
     如果这个特性和allowTaskReparenting都设定为“true”,这个特性胜出。Activity的affinity忽略。这个 Activity不会重新宿主,但是会销毁。

android.icon

     用法:<application android:icon="@drawable/xx_icon"></application>,加在应用程序图标

android:label

     定义了每个title栏的名称,但是优先级低于activity中的setTitle()


android:windowSoftInputMode属性


activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。

这个属性能影响两件事情:

【一】当有焦点产生时,软键盘是隐藏还是显示

【二】是否减少活动主窗口大小以便腾出空间放软键盘

它的设置必须是下面列表中的一个值,或一个state…”值加一个adjust…”值的组合。在任一组设置多个值——多个state…”values,例如&mdash有未定义的结果。各个值之间用|分开。例如:<activity android:windowSoftInputMode="stateVisible|adjustResize". . . >

在这设置的值("stateUnspecified""adjustUnspecified"以外)将覆盖在主题中设置的值


各值的含义:

【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置

【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示

【C】stateHidden:用户选择activity时,软键盘总是被隐藏

【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的

【E】stateVisible:软键盘通常是可见的

【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态

【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示

【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间

【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分




 


你可能感兴趣的:(Activity配置属性)