您的当前位置:首页Android application 和 activity 标

Android application 和 activity 标

2024-12-14 来源:哗拓教育

Application 标签

android:debuggable=["true" | "false"]

  这个标识用来表明该应用是否可以被调试,默认值为 false.

android:description="string resource"

  用来声明关于这个应用的详细说明,用户可读的,必须使用 @string 的样式来声明,这个声明要比 label 标签声明的文字更加详细,而且和 label 不一样,这个标识不能够使用 raw string。

这个标识用来表明系统能否实例化这个应用的组件,true 代表可以,false 代表不可以,如果此值设为 true,则由每个组件的 enabled 属性确定自身的启用或禁用,如果此值设为 false ,则覆盖组件的设置值,所有组件都将被禁用。该标识的默认值是 true 。

android:extractNativeLibs=["true" | "false"]

  这个标识为 android 6.0 引入,该属性如果设置为 false,则系统在安装应用的时候不会把 so 文件从 apk 中解压出来了,同时修改 System.loadLibrary 直接打开调用 apk 中的 so 文件。但是,目前要让该技巧生效还需要额外2个条件:一个是apk 中的 .so 文件不能被压缩;二个是 .so 必须用 zipalign -p 4 来对齐。该标识的默认值为 true。

<?xml version="1.0" encoding="utf-8"?>
<manifest   
          
        package="com.my.appexample">  
    ...
    <app ...  
        android:fullBackupContent="@xml/mybackupscheme">  
    </app>  
    ...  
</manifest>  

在此示例代码中,android:fullBackupContent 属性指定了一个 XML 文件。该文件名为mybackupscheme.xml,位于应用开发项目的 res/xml/ 目录中。 此配置文件包括关于要备份哪些文件的规则。 下列示例代码显示了将某一特定文件排除在备份之外的配置文件:

<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    <exclude domain="database" path="device_info.db"/>
</full-backup-con

此示例备份配置仅将一个特定数据库文件排除在备份之外,所有其他文件均予以备份。

android:isGame=["true" | "false"]

  这个标识用来指明该应用是否是游戏,这样就能够将该应用和其他应用分离开来,默认的改值为 false。

android:killAfterRestore=["true" | "false"]

  这个标识用来指明在手机恢复出厂设置之后,该应用的所有设置信息都被重置时,该应用是否需要被杀死,单个应用的重置设置操作一般不会造成应用的关闭,整个系统的重置操作一般只会发生一次,那就是手机第一次进入系统时的初始化设置,第三方应用一般情况下不需要用到该标识,

  默认该值为 true,这表明系统重置设置之后,应用程序将在处理数据完成后被关闭。

android:logo="drawable resource"

  这个标识指定了整个应用程序的 logo 标识,也即各 Activity 的默认 logo。
本属性必须设为对 drawable 资源的引用,该资源中包含了图片文件(例如“@drawable/logo”)。 logo 没有默认值。上面也介绍到了和 android:icon 的区别,这个是在 actionBar 或者 toolBar 上面展示的,icon 属性是在桌面显示的。

android:name="string"

  该标识用来指定该应用程序 Application 子类的完全限定名称,该类将优先于所有程序组件被实例化,该子类是可选的,根据应用程序的实际需求看是否使用,但是大多数应用程序都有使用,如果没有提供该 Application 子类时,Android 将使用 Application 类的实例。

android:process="string"

  应用程序的全部组件都将运行于其中的进程名称。 每个组件通过设置各自的 process 属性,可以覆盖本缺省值。

  默认情况下,当运行应用程序的第一个组件时,Android 会为程序创建一个进程。 然后所有组件都会运行在这个进程中。 默认进程的名称与应用程序里面设置的 package 包名一致。

  通过将本属性设置为其他应用程序的进程名称,可以让两个应用程序的组件运行于同一个进程中 — 但只有这两个应用程序使用 sharedUserId 指定为同一个 userId 并用要用同一个证书签名时才行。

  如果赋予本属性的名称是以冒号(':')开头的,则必要时将会为应用程序创建一个新的私有进程。 如果进程名称以小写字母开头,则将创建以此名称命名的全局进程。 全局进程可以被其他应用程序共享,以减少资源的占用。

android:restoreAnyVersion=["true" | "false"]

  该标识用来指明一个应用程序可以通过任何版本的备份数据进行数据恢复,就算该备份数据是从当前安装版本的更新版本应用备份出来的,把这个标识设置为 true 之后,Backup Manager 将会从一个不匹配版本的备份数据进行数据恢复操作,即使发生版本冲突也即数据版本不兼容时也是如此。 使用本属性时一定要特别小心。该标识的默认值为 false。

android:supportsRtl=["true" | "false"]

  这个标识是用来声明应用是否要支持从右到左的(RTL)布局方式。
  如果本标识属性设置为 true 并且同时 targetSdkVersion 为 17 或者以上版本,则系统将会激活并使用各种 RTL API ,应用程序就可以显示 RTL Layout。 如果本属性设为 false 或者 targetSdkVersion 为 16 以下版本,则 RTL API 将会被忽略或失效,应用程序将忽略与 Layout 方向有关的用户本地化选项(Layout 都将从左到右布局)。本属性的默认值是 false,为 API17 版本添加。

android:testOnly=["true" | "false"]

  该标识用来指明这个应用是不是仅仅作为测试的用途,比如,本应用程序可能会暴露一些不属于自己的功能或数据,这将引发安全漏洞,但对测试而言这又非常有用,而且这种应用程序只能通过 adb 进行安装。

android:uiOptions=["none" | "splitActionBarWhenNarrow"]

  这个标识用来指定这个应用所有的 Activity 的 UI 附加选项,它有两个值:

Value Description
"none" 没有其他的 UI 选项,改值为这个标识的默认值
"splitActionBarWhenNarrow" 当水平空间受限时(例如在手持设备上的纵向模式下时)在屏幕底部添加一个栏以显示应用栏(也称为操作栏)中的操作项。 应用栏不是以少量操作项形式出现在屏幕顶部的应用栏中,而是分成了顶部导航区和底部操作项栏。 这可以确保操作项以及顶部的导航和标题元素都能获得合理的空间。 菜单项不会拆分到两个栏中,它们始终一起出现。

Activity 标签

android:allowEmbedded=["true" | "false"]

  这个标识一般为开发可穿戴设备时使用,表示该 Activity 可作为另一 Activity 的嵌入式子项启动。 它尤其适用于子项所在的容器(如 Display)为另一 Activity 所拥有的情况。 例如,用于 Wear 自定义通知的 Activity 必须声明此项,以便 Wear 在其上下文流中显示 Activity,后者位于另一进程中。该属性的默认值为 false。

android:allowTaskReparenting=["true" | "false"]

  这个标示和 Application 的标识意义一样,所以如果同时声明该标识,这个标识会覆盖 Application 的标识,

android:alwaysRetainTaskState=["true" | "false"]

  这个标识用来指示系统是否始终保持 Activity 所在任务的状态 —“true”表示保持,“false”表示允许系统在特定情况下将任务重置到其初始状态。 默认值为“false”。该属性只对任务的根 Activity 有意义;对于所有其他 Activity,均忽略该属性。

  正常情况下,当用户从主屏幕重新选择某个任务时,系统会在特定情况下清除该任务(从根 Activity 之上的堆栈中移除所有 Activity)。 系统通常会在用户一段时间(如 30 分钟)内未访问任务时执行此操作。

  不过,如果该属性的值是“true”,则无论用户如何到达任务,将始终返回到最后状态的任务。 例如,在网络浏览器这类存在大量用户不愿失去的状态(如多个打开的标签)的应用中,该属性会很有用。

  这个有点抽象,举个例子,打开客户端的顺序是 SplashActivity --> GuideActivity --> MainActivity(欢迎页面 --> 功能引导页面 --> 主页面),那么,它在任务栈中就是:

  


  由于我们在 Androidmanifest.xml 文件中,给 SplashActivity 设置 android:alwaysRetainTaskState='true',当我们按 HOME 键返回桌面,任务栈的状态被保留着,当我们点击应用图标打开再次应用时,系统会判断是否已经存在以 SplashActivity 为根 Activity 的栈,如果有,那么就直接使用该栈,并显示栈顶的 Activity。注意,只需要设置根 Activity 就可以了。

android:clearTaskOnLaunch=["true" | "false"]

  这个标识用来指明当应用从主屏幕重新启动时是否都从中移除除根 Activity 之外的所有 Activity,true 表示始终将任务清除到只剩其根 Activity,false 表示不清除,默认值为 false。需要注意的是该属性只对启动新任务的 Activity(根 Activity)有意义;对于任务中的所有其他 Activity,均忽略该属性。当值为“false”时,可在某些情况下清除任务中的 Activity(参考结合 alwaysRetainTaskState 属性),但并非一律可以。如果该属性和 allowTaskReparenting 的值均为“true”,则如上所述,任何可以更改父项的 Activity 都将转移到与其有亲和关系的任务;其余 Activity 随即被移除。

  例如,假定有人从主屏幕启动了 Activity P,然后从那里转到 Activity Q。该用户接着按了主屏幕按钮,然后返回到 Activity P。正常情况下,用户将看到 Activity Q,因为那是其最后在 P 的任务中执行的 Activity。 不过,如果 P 将此标志设置为“true”,则当用户按下主屏幕将任务转入后台时,其上的所有 Activity(在本例中为 Q)都会被移除。 因此用户返回任务时只会看到 P。

android:configChanges=["mcc", "mnc", "locale",
"touchscreen", "keyboard", "keyboardHidden",
"navigation", "screenLayout", "fontScale",
"uiMode", "orientation", "screenSize",
"smallestScreenSize"]

  列出 Activity 将自行处理的配置更改。在运行时发生配置更改时,默认情况下会关闭 Activity 然后将其重新启动,但使用该属性声明配置将阻止 Activity 重新启动。 Activity 反而会保持运行状态,并且系统会调用其 onConfigurationChanged() 方法。以下为该属性的值,多个值使用“|”分隔 — 例如,“locale|navigation|orientation”:

Value Description
“mcc” IMSI 移动国家/地区代码 (MCC) 发生了变化 - 检测到了 SIM 并更新了 MCC。
“mnc” IMSI 移动网络代码 (MNC) 发生了变化 - 检测到了 SIM 并更新了 MNC。
locale” 语言区域发生了变化 — 用户为文本选择了新的显示语言。
“touchscreen” 触摸屏发生了变化。(这种情况通常永远不会发生。)
“keyboard” 键盘类型发生了变化 — 例如,用户插入了一个外置键盘。
“keyboardHidden” 键盘无障碍功能发生了变化 — 例如,用户显示了硬件键盘。
“navigation” 导航类型(轨迹球/方向键)发生了变化。(这种情况通常永远不会发生。)
“screenLayout” 屏幕布局发生了变化 — 这可能是由激活了其他显示方式所致。
“fontScale” 字体缩放系数发生了变化 — 用户选择了新的全局字号。
“uiMode” 用户界面模式发生了变化 — 这可能是因用户将设备放入桌面/车载基座或夜间模式发生变化所致。
请参阅 。 此项为 API 级别 8 中新增配置。
“orientation” 屏幕方向发生了变化 — 用户旋转了设备。
注:如果您的应用面向 API 级别 13 或更高级别(按照 minSdkVersion 和 targetSdkVersion 属性所声明的级别),
则还应声明 "screenSize" 配置,因为当设备在横向与纵向之间切换时,该配置也会发生变化。
“screenSize” 当前可用屏幕尺寸发生了变化。它表示当前可用尺寸相对于当前纵横比的变化,因此会在用户在横向与纵向之间切换时发生变化。
不过,如果您的应用面向 API 级别 12 或更低级别,则 Activity 始终会自行处理此配置变更
(即便是在 Android 3.2 或更高版本的设备上运行,此配置变更也不会重新启动 Activity)。
此项为 API 级别 13 中新增配置。
“smallestScreenSize” 物理屏幕尺寸发生了变化。它表示与方向无关的尺寸变化,因此只有在实际物理屏幕尺寸发生变化(如切换到外部显示器)时才会变化。
对此配置的变更对应于smallestWidth 配置的变化。 不过,如果您的应用面向 API 级别 12 或更低级别,则 Activity 始终会自行处理此配置变更
(即便是在 Android 3.2 或更高版本的设备上运行,此配置变更也不会重新启动 Activity)。
此项为 API 级别 13 中新增配置。
“layoutDirection” 布局方向发生了变化。例如,从从左至右 (LTR) 更改为从右至左 (RTL)。 此项为 API 级别 17 中新增配置。

Value Description
“intoExisting” Activity 会为文档重复使用现有任务。使用该值与不设置 标志、但设置 标志所产生的效果相同,如使用 所述。
“always” Activity 为文档创建新任务,即便文档已打开也是如此。 这与同时设置 和 标志的效果相同。
“none” 该 Activity 不会为 Activity 创建新任务。这是默认值,它只会在设置了 时创建新任务。 概览屏幕将按其默认方式对待此 Activity:为应用显示单个任务,该任务将从用户上次调用的任意 Activity 开始继续执行。
“never” 即使 Intent 包含 ,该 Activity 也不会启动到新文档之中。 设置此值会替代 和 标志的行为(如果在 Activity 中设置了其中一个标志),并且概览屏幕将为应用显示单个任务,该任务将从用户上次调用的任意 Activity 开始继续执行。

android:enabled=["true" | "false"]

  该属性用来标示系统是否可将 Activity 实例化 — "true" 表示可以,“false”表示不可以。 默认值为“true”。

  上面提到了 <application> 元素具有自己的 enabled 属性,该属性适用于所有应用组件,包括 Activity。 <application> 和 <activity> 属性必须都是“true”(因为它们都默认使用该值),系统才能将 Activity 实例化。 如果任何一个属性是“false”,则无法进行实例化。

android:excludeFromRecents=["true" | "false"]

  该标识用来标示是否应将该 Activity 启动的任务排除在最近使用的应用列表(即概览屏幕)之外。 也就是说,当该 Activity 是新任务的根 Activity 时,此属性确定任务是否应出现在最近使用的应用列表中。 如果应将任务排除在列表之外,请设置“true”;如果应将其包括在内,则设置“false”。 默认值为“false”。

android:finishOnTaskLaunch=["true" | "false"]

  该标识用来标示每当用户再次启动其任务(在主屏幕上选择任务)时,是否应关闭(完成)现有 Activity 实例 —“true”表示应关闭,“false”表示不应关闭。 默认值为“false”。如果该属性和 allowTaskReparenting 均为“true”,则优先使用该属性。 Activity 的亲和关系会被忽略。 系统不是更改 Activity 的父项,而是将其销毁。

android:hardwareAccelerated=["true" | "false"]

  该标识用来表明是否应为此 Activity 启用硬件加速渲染 —“true”表示应启用,“false”表示不应启用,默认值为“false”。

  和 application 的标识不一样的是,该标示只针对 Activity。

  从 Android 3.0 开始,为应用提供了硬件加速 OpenGL 渲染器,以改善许多常见 2D 图形运算的性能。 启用硬件加速渲染器时,Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的大多数运算都会得到加速。这可以提高动画、滚动的流畅度和总体响应速度,即便是并不明确使用框架 OpenGL 库的应用也会受益。 由于启用硬件加速会增加资源消耗,因此您的应用将占用更多内存。
  需要注意的是,并非所有 OpenGL 2D 运算都会得到加速。如果您启用硬件加速渲染器,请对应用进行测试,以确保其在利用渲染器时不会出错。

一个表示 Activity 的图标。该图标会在需要在屏幕上表示 Activity 时显示给用户。 例如,代表启动任务的 Activity 的图标显示在启动器窗口中。该图标通常附带标签(请参阅 android:label 属性)。

  必须将该属性设置为对包含图像定义的可绘制资源的引用。 如果未设置该属性,则改为使用为应用整体指定的图标(请参阅 <application> 元素的 icon 属性),activity 的该属性会覆盖 application 的该属性。这个 Activity 的图标 — 无论设置于此处还是由 <application> 元素设置 — 同时也是 Activity 所有 Intent 过滤器的默认图标(请参阅 <intent-filter> 元素的 icon 属性)。

android:label="string resource"

  一种可由用户读取的 Activity 标签。该标签会在必须将 Activity 呈现给用户时显示在屏幕上。 它通常与 Activity 图标一并显示。如果未设置该属性,则改为使用为应用整体设置的标签(请参阅 <application> 元素的 label 属性),activity 的该属性会覆盖 application 的该属性。

  这个 Activity 的标签 — 无论设置于此处还是由 <application> 元素设置 — 同时也是 Activity 所有 Intent 过滤器的默认标签(请参阅 <intent-filter> 元素的 label 属性)。应将该标签设置为对字符串资源的引用,以便可以像用户界面中的其他字符串那样进行本地化。不过,为便于开发应用,也可将其设置为原始字符串。

android:multiprocess=["true" | "false"]

  该标识用来指明是否可以将 Activity 实例启动到启动该实例的组件进程内 —“true”表示可以,“false”表示不可以。默认值为“false”。

  正常情况下,新的 Activity 实例会启动到定义它的应用进程内,因此所有 Activity 实例都在同一进程内运行。 不过,如果该标志设置为“true”,Activity 实例便可在多个进程内运行,这样系统就能在任何使用实例的地方创建实例(前提是权限允许这样做),但是貌似使用的场景和案例不是很多。

android:name="string"

  该标识应该不用介绍了,用来指定 Activity 的类的名称,是 Activity 的子类。 该属性值应为完全限定类名称(例如,“com.example.project.DemoActivity”)。不过,为了简便起见,如果名称的第一个字符是句点(例如,“.DemoActivity”),则名称将追加到 <manifest> 元素中指定的软件包 com.example.project 名称之后。还有一个需要注意的是,应用一旦发布,即不应更改该名称(除非您设置了 android:exported="false"),也就是说如果您的 Activity 有让其他应用使用到,那么最好不要修改名字,因为有可能其他应用是通过显式的方式指定的 Activity 名字,修改名字可能会造成其他应用无法正常使用甚至崩溃。

  该标识没有默认值。必须指定该名称。

android:noHistory=["true" | "false"]

  当用户离开 Activity 并且其在屏幕上不再可见时,是否应从 Activity 堆栈中将其移除并完成(调用其 finish() 方法)—“true”表示应将其完成,“false”表示不应将其完成。 默认值为“false”。

  “true”一值表示 Activity 不会留下历史轨迹。 它不会留在任务的 Activity 堆栈内,因此用户将无法返回 Activity。 所以有一点需要特别注意的是,在此情况下,如果从这个定义了 noHistory 的 Activity 启动另一个 Activity 来获取它的结果,系统永远不会调用 onActivityResult(),因为此时这个 Activity 已经关闭了。

<activity
    android:name="com.example.app.ChildActivity"
    android:label="@string/title_child_activity"
    android:parentActivityName="com.example.app.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>

android:process="string"

  应在其中运行 Activity 的进程的名称。正常情况下,应用的所有组件都在为应用创建的默认进程名称内运行,您无需使用该属性。 但在必要时,您可以使用该属性替换默认进程名称,以便让应用组件散布到多个进程中。如果为该属性分配的名称以冒号(“:”)开头,则会在需要时创建应用专用的新进程,并且 Activity 会在该进程中运行。如果进程名称以小写字符开头,Activity 将在该名称的全局进程中运行,前提是它拥有相应的权限。这可以让不同应用中的组件共享一个进程,从而减少资源占用。

  上面提到的 Application 元素的 process 属性可为所有组件设置一个不同的默认进程名称。

android:resizeableActivity=["true" | "false"]

  这个标识和 <application> 里面的作用一样,如果在 activity 里面定义的话则代表这个 activity 是否支持分屏模式。如果您将该属性设置为 true,则用户可以分屏和自由形状模式启动 Activity。 如果您将该属性设置为 false,Activity 将不支持多窗口模式。 如果该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。

  该属性是在 API 级别 24 添加的,如果您的应用面向 API 级别 24 或更高级别,但未对该属性指定值,则该属性的值默认设为 true。

Value Description
“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” 方向由 4 种方向中任一方向的设备方向传感器决定。这与 "sensor" 类似,不同的是它允许所有 4 种可能的屏幕方向,无论设备正常情况下采用什么方向(例如,一些设备正常情况下不使用反向纵向或反向横向,但它支持这些方向)。 API 级别 9 中的新增配置。
“nosensor” 决定方向时不考虑物理方向传感器。传感器会被忽略,因此显示不会随用户对设备的移动而旋转。 除了这个区别,系统在选择方向时使用的政策与“unspecified”设置相同。
“user” 用户当前的首选方向。
"fullUser" 如果用户锁定了基于传感器的旋转,其行为与 user 相同,否则,其行为与 fullSensor 相同,允许所有 4 种可能的屏幕方向。 API 级别 18 中的新增配置。
“locked” 将方向锁定在其当前的任意旋转方向。API 级别 18 中的新增配置。

注:如果您声明其中一个横向或纵向值,系统将其视为对 Activity 运行方向的硬性要求。 因此,您声明的值支持通过 Google Play 之类的服务进行过滤,这样就能将您的应用只提供给支持 Activity 所要求方向的设备。 例如,如果您声明了 "landscape"、"reverseLandscape" 或 "sensorLandscape",则您的应用将只提供给支持横向方向的设备。 不过,您还应通过 <uses-feature> 元素明确声明,您的应用要求采用纵向或横向方向。 例如,<uses-feature android:name="android.hardware.screen.portrait"/>。这纯粹是 Google Play(以及其他支持它的服务)提供的一种过滤行为,平台本身并不能控制当设备仅支持特定方向时您的应用能否安装。

android:stateNotNeeded=["true" | "false"]

  该标识用来指明能否在不保存 Activity 状态的情况下将其终止并成功重新启动 —“true”表示可在不考虑其之前状态的情况下重新启动,“false”表示需要之前状态,默认值为“false”。一般情况下,为保存资源而暂时关闭 Activity 前,系统会调用 onSaveInstanceState() 方法,该方法将 Activity 的当前状态存储在一个 Bundle 对象中,然后在 Activity 重新启动时将其传递给 onCreate() 。如果该属性设置为 true,系统可能不会调用 onSaveInstanceState(),并且会向 onCreate() 传递 null 而不是 Bundle,这样就与它在 Activity 首次启动时完全一样。

  这个标识又一个特别有用的地方是,true 设置可确保 Activity 能够在未保留状态时重新启动。 例如,显示主屏幕的 Activity 可以使用该设置来确保其由于某种原因崩溃时不会被移除。

android:uiOptions=["none" | "splitActionBarWhenNarrow"]

  这个标识主要是用来针对 action bar 的,它有两个值:

Value Description
"none" 无附加 UI 选项。这是默认值。
"splitActionBarWhenNarrow" 当水平空间受限时(例如在手持设备上的纵向模式下时)在屏幕底部添加一个栏以显示应用栏(也称为操作栏)中的操作项)。 应用栏不是以少量操作项形式出现在屏幕顶部的应用栏中,而是分成了顶部导航区和底部操作项栏。 这可以确保操作项以及顶部的导航和标题元素都能获得合理的空间。 菜单项不会拆分到两个栏中,它们始终一起出现。

android:windowSoftInputMode=["stateUnspecified",
"stateUnchanged", "stateHidden",
"stateAlwaysHidden", "stateVisible",
"stateAlwaysVisible", "adjustUnspecified",
"adjustResize", "adjustPan"]

  这个标识用来设置 Activity 的主窗口与包含屏幕软键盘的窗口的交互方式,这个属性的设置影响两个方面:<ul><li>当 Activity 成为用户注意的焦点时软键盘的状态 — 隐藏还是可见。</li><li>对 Activity 主窗口所做的调整 — 是否将其尺寸调小以为软键盘腾出空间,或者当窗口部分被软键盘遮挡时是否平移其内容以使当前焦点可见。</li></ul>该设置必须是下表所列的值之一,或者是一个“state...”值加上一个“adjust...”值的组合。 在任一组中设置多个值(例如,多个“state...”值)都会产生未定义结果。各值之间使用垂直条 (|) 分隔。 例如:<activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >,这个标识可以设置的值如下:

Value Description
"stateUnspecified" 不指定软键盘的状态(隐藏还是可见)。 将由系统选择合适的状态,或依赖主题中的设置。这是对软键盘行为的默认设置。
“stateUnchanged” 当 Activity 转至前台时保留软键盘最后所处的任何状态,无论是可见还是隐藏。
“stateHidden” 当用户选择 Activity 时 — 也就是说,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时 — 隐藏软键盘。
“stateAlwaysHidden” 当 Activity 的主窗口有输入焦点时始终隐藏软键盘。
“stateVisible” 在正常的适宜情况下(当用户向前导航到 Activity 的主窗口时)显示软键盘。
“stateAlwaysVisible” 当用户选择 Activity 时 — 也就是说,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时 — 显示软键盘。
“adjustUnspecified” 不指定 Activity 的主窗口是否调整尺寸以为软键盘腾出空间,或者窗口内容是否进行平移以在屏幕上显露当前焦点。 系统会根据窗口的内容是否存在任何可滚动其内容的布局视图来自动选择其中一种模式。 如果存在这样的视图,窗口将进行尺寸调整,前提是可通过滚动在较小区域内看到窗口的所有内容。这是对主窗口行为的默认设置。
“adjustResize” 始终调整 Activity 主窗口的尺寸来为屏幕上的软键盘腾出空间。
“adjustPan” 不调整 Activity 主窗口的尺寸来为软键盘腾出空间, 而是自动平移窗口的内容,使当前焦点永远不被键盘遮盖,让用户始终都能看到其输入的内容。 这通常不如尺寸调正可取,因为用户可能需要关闭软键盘以到达被遮盖的窗口部分或与这些部分进行交互。

adjustResize 和 adjustPan 的区别就在于前者是调整 Activity 的窗口尺寸来达到适配的目的,而 adjustPan 仅仅只是将窗口平移,界面的一部分就会被软键盘覆盖住,就不会被挤到软键盘之上了。

引用

显示全文