Android application 和 activity 标签详解

Application 标签

android:allowTaskReparenting

  android:allowTaskReparenting=[“true” | “false”]

  代表了这个应用在 reset task 时,它的全部 activity 是否能够从打开它们的 task 栈中迁移到它们声明的 taskAffinity 亲和性(taskAffinity 属性能够查看个人这篇博客:android深刻解析Activity的launchMode启动模式,Intent Flag,taskAffinity)栈中,true 表明能够,false 表明不能够。Android 源码中,咱们从 Home 界面启动程序时都带了 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,因此从 Home 界面启动程序就会进行 reset task,也就会使用到 allowTaskReparenting 这个属性。

  通常来讲,当 Activity 启动后,它就与启动它的 Task 关联,而且在那里消耗它的整个生命周期,当当前的 Task 再也不显示时,你可使用这个特性来强制 Activity 移动到有着 affinity 的 Task 中。例如在一封 email 邮件中包含一个 web 页面的连接,点击它就会启动一个 Browser Activity 来显示这个页面,这个 Activity 时由 Browser 应用程序定义的,可是如今它做 email Task 的一部分,将它的 allowTaskReparenting 设置为 true,若是 Browser 下一次进入前台时,它就会根据 taskAffinity 属性从新宿主到 Browser Task 栈中,它就能被看见,而且当 email Task 再次进入前台时,就看不到它了。html

android:allowBackup

  android:allowBackup=[“true” | “false”]

  这个标识用来表示是否容许应用备份相关的数据而且在必要时候恢复还原这些数据,若是该标识设为 false,则表明不备份和恢复任何的应用数据,默认的该标识属性为 true。当 allowBackup 标识设置为 true 时,用户便可以经过 adb backup 和 adb restore 来进行对应数据的备份和恢复,这个在不少时候会带来必定的安全风险。

  adb backup 命令允许任何一个打开 USB 调试开关的人从 Android 手机中复制应用数据到外设,一旦应用数据被备份以后,全部应用数据均可被用户读取;adb restore 命令容许用户指定一个恢复的数据来源(即备份的应用数据)来恢复应用程序数据的建立。所以,当一个应用数据被备份以后,用户便可在其余Android手机或模拟器上安装同一个应用,以及经过恢复该备份的应用数据到该设备上,在该设备上打开该应用便可恢复到被备份的应用程序的状态。尤为是通信录应用,一旦应用程序支持备份和恢复功能,攻击者便可经过adb backup和adb restore进行恢复新安装的同一个应用来查看聊天记录等信息;对于支付金融类应用,攻击者可经过此来进行恶意支付、盗取存款等;所以为了安全起见,开发者务必将allowBackup标志值设置为false来关闭应用程序的备份和恢复功能,以避免形成信息泄露和财产损失。

  网上也能够看到不少将 allowBackup 设置为 true 带来的许多风险,能够看看这篇博客:详解Android App AllowBackup配置带来的风险java

android:backupAgent

  android:backupAgent=”string”

  android:backupAgent 这个标识是用来设置备份代理,对于大部分应用程序来讲,都或多或少保存着一些持久性的数据,好比数据库和共享文件或者有本身的配置信息,为了保证这些数据和配置信息的安全性以及完整性,Android提供了这样一个机制,咱们能够经过这个备份机制来保存配置信息和数据以便为应用程序提供恢复点。若是用户将设备恢复出厂设置或者转换到一个新的Android设备上,系统就会在应用程序从新安装时自动恢复备份数据。这样,用户就不须要从新产生它们之前的数据或者设置了。这个进程对于用户是彻底透明的,而且不影响其自身的功能或者应用程序的用户体验。要实现备份代理,就必须作两件事,一是实现 BackupAgent 或者 BackupAgentHelper 的子类,二是在 Manifest 文件内用 android:backupAgent 属性声明备份代理。android

android:backupInForeground

  android:backupInForeground=[“true” | “false”]

  这个标识用来代表Auto Backup for Apps功能是否能够在应用在前台的时候进行数据的备份。Auto Backup for Apps功能是 Android 6.0 引入的一个新功能,它容许一个应用将本身的备份数据保存到 Google Drive 上面,每一个用户能够免费保存 25M 的应用数据,这个新功能须要配合 android:allowBackup 一块儿使用。

  这个标识的默认值为 false ,这意味着系统不会备份一个应用的数据,若是这个应用运行在前台(好比一个音乐软件的后台播放 service 是经过 startForeground 打开的)。git

android:banner

  android:banner=”drawable resource”

  这个标识是用在 Android TV 电视上用轮播图来表明一个应用,因为轮播图只是在 HOME 界面上显示的,因此它仅仅只能被一个带有可以处理 CATEGORY_LEANBACK_LAUNCHER intent Activity 的应用声明。因为这个标识是 Android TV 开发使用到的,在这里就不详细介绍了,具体的能够看 Google 的 API 文档。github

android:debuggable

  android:debuggable=[“true” | “false”]

  这个标识用来代表该应用是否能够被调试,默认值为 false.web

android:description

  android:description=”string resource”

  用来声明关于这个应用的详细说明,用户可读的,必须使用 @string 的样式来声明,这个声明要比 label 标签声明的文字更加详细,并且和 label 不同,这个标识不可以使用 raw string。数据库

android:enabled

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

android:extractNativeLibs

  android:extractNativeLibs=[“true” | “false”]

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

android:fullBackupContent

  android:fullBackupContent=”string”

  这个标识用来指明备份的数据的规则,该标识固然是配合Auto Backup for Apps来使用的,它也是在 Android 6.0 中引入的,使用的方式以下所示:安全

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
        xmlns:tools="http://schemas.android.com/tools"  
        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:fullBackupOnly

  android:fullBackupOnly=[“true” | “false”]

  这个标识用来指明当Auto Backup for Apps功能可使用的时候是否开启它。若是该标识设置为 true,在 Android 6.0 以及之上的手机上,应用将会执行Auto Backup for Apps功能,在以前的 Android 版本中,你的应用将会自动忽略该标识,而且切换成 Key/Value Backups

android:hasCode

  android:hasCode=[“true” | “false”]

  该标识用来指明应用程序是否包含代码,“true”表示包含,“false”表示不包含。 若是此值设为“false”,则在启动组件时系统不会试图装载任何程序代码。 默认值是“true”。

应用程序不包含任何自有代码的状况极少发生。 仅当只用到了内置的组件类时才有可能,好比使用了AliasActivity 类的 Activity。

android:hardwareAccelerated

  android:hardwareAccelerated=[“true” | “false”]

  是否为应用程序中全部的 Activity 和 View 启用硬件加速渲染功能 —“true”表示开启,“false”表示关闭。 若是 minSdkVersion 或 targetSdkVersion 的值大于等于“14”,则本属性默认值是“true”,不然,默认值为“false”。

  自 Android 3.0 (API 级别 11)开始,应用程序可使用硬件加速的 OpenGL 渲染功能来提升不少经常使用 2D 图形操做的性能。 当开启硬件加速渲染功能时,大部分 Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的操做都会被加速。 即使应用程序没有显式地调用系统的 OpenGL 库,这仍能使动画更加平滑、屏幕滚动也更加流畅、总体响应速度得到改善。

  请注意,并不是全部的 OpenGL 2D 操做都会被加速。 若是开启了硬件加速渲染功能,请对应用程序进行测试以确保使用渲染时不会出错。更多详细的操做能够去查看 google 文档硬件加速指南

android:icon

  android:icon=”drawable resource”

  表明整个应用程序的图标,也即应用程序中每一个组件的默认图标。 请参阅 < activity >< activity-alias >< service >< receiver > < provider > 元素各自的icon属性。本属性必须设为对 drawable 资源的引用(例如“ @drawable/icon ”)。 图标没有默认值。

  必需要注意到的是这个标识和下面要介绍到的 android:logo 标签不同,这个标签是在桌面显示的图标,然后者是在 actionBar 或者 toolBar 上面显示的。

android:isGame

  android:isGame=[“true” | “false”]

  这个标识用来指明该应用是不是游戏,这样就可以将该应用和其余应用分离开来,默认的改值为 false。

android:killAfterRestore

  android:killAfterRestore=[“true” | “false”]

  这个标识用来指明在手机恢复出厂设置以后,该应用的全部设置信息都被重置时,该应用是否须要被杀死,单个应用的重置设置操做通常不会形成应用的关闭,整个系统的重置操做通常只会发生一次,那就是手机第一次进入系统时的初始化设置,第三方应用通常状况下不须要用到该标识,

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

android:largeHeap

  android:largeHeap=[“true” | “false”]

  这个标识用来代表这个应用的进程是否须要更大的运行内存空间,这个标识对该应用的全部进程都有效,可是须要注意的一点是,这仅仅对第一个加载进这个进程的应用起做用,若是用户经过 sharedUserId 将多个应用置于同一个进程(SharedUserId 的具体用法能够参考个人博客:android IPC通讯(上)-sharedUserId&&Messenger),那么两个应用都必需要指定该标识而且设置为同一个值,要否则就会产生意想不到的结果。

  大部分应用程序不须要用到本属性,而是应该关注如何减小内存消耗以提升性能。 使用本属性并不能确保必定会增长可用的内存,由于某些设备可用的内存原本就颇有限。

要在运行时查询可用的内存大小,请使用 getMemoryClass()getLargeMemoryClass() 方法,后者的方法能够获取到应用开启 largeHeap 以后能够得到的内存大小。

  这里说到一点是,一个应用不该该经过这个属性来解决 OOM 问题,而是应该经过检测内存泄漏来完全根治 OOM,并且当内存很大的时候,每次gc的时间也会长一些,性能也会随之降低。

android:label

  android:label=”string resource”

  这个标签应该是很经常使用的一个标签,它供用户阅读的表明整个应用程序的文本标签,也即应用程序中每一个组件的默认标签。 请参阅 < activity >< activity-alias >< service >< receiver > < provider > 元素各自的 label 属性。

  文本标签应设为一个字符串资源的引用,这样就能像其它用户界面内的字符串同样对其进行本地化。 不过,考虑到开发时的便利性,也能够将其直接设为字符串。

  android:logo=”drawable resource”

  这个标识指定了整个应用程序的 logo 标识,也即各 Activity 的默认 logo。

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

android:manageSpaceActivity

  android:manageSpaceActivity=”string”

  这个标识用来指定一个 Activity 的名字,当用户在设置页面中手动点击清除数据按钮时,不会像之前同样把应用的私有目录/data/data/包名下的数据彻底清除,而是跳转到那个声明的 activity 中,让用户遵守 activity 中提供的功能清除指定的数据。

  感兴趣的能够看看该连接:android:manageSpaceActivity让应用手动管理应用的数据目录

android:name

  android:name=”string”

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

android:permission

  android:permission=”string”

  该标识用来指定客户端要与应用程序交互而必须拥有的权限名称,本属性为一次设置适用于所有程序组件的权限提供了一个便捷途径,它能够被组件各自的 permission 属性覆盖,这个就至关于把 permission 标签设置给了应用里面的每一个 Activity,Service 等等四大组件,详细的能够查看 google 文档的权限或者另外一篇文档安全与权限

  或者能够看看这篇对于 permission 的博客:android permission权限与安全机制解析(上)

android:persistent

  android:permission=”string”

  该标识用来指明一个应用程序是否须要一直保持运行状态,true 表明是,false 表明否,默认值是 false。通常的第三方应用是不该该设置该标识的,持久运行模式适用于某些特定的系统应用,好比通话,短信等应用,并且该应用在异常崩溃出现后,虽然这种状况很稀少,会当即重启,因此该标识第三方应用设置以后是很差用的。

  这个标识的详细剖析能够看看这个博客:android persistent属性研究

android:process

  android:process=”string”

  应用程序的所有组件都将运行于其中的进程名称。 每一个组件经过设置各自的 process 属性,能够覆盖本缺省值。

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

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

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

android:restoreAnyVersion

  android:restoreAnyVersion=[“true” | “false”]

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

android:requiredAccountType

  android:requiredAccountType=”string”

  该标识为 API18 版本添加,设定应用程序所需的帐户类型。 若是应用程序须要一个 Account 才能运行,本属性值必须与帐户的认证类型(由 AuthenticatorDescription 定义)吻合,好比“com.google”。默认值是 null,表示应用程序不须要任何帐户就能够运行。由于目前的受限用户配置功能(Restricted Profile)没法添加帐户,设定本属性的应用程序对于受限用户而言是不可用的, 除非你同时将 android:restrictedAccountType 也声明为相同的值。

  提醒:若是帐户数据可能会泄露我的身份信息,声明本属性就很重要了,而且要把 android:restrictedAccountType 设置为 null ,这样受限用户就没法用你的应用程序来访问机主的我的信息了。

android:restrictedAccountType

  android:restrictedAccountType=”string”

  该标识和 android:requiredAccountType 同样也是 API18 添加,可是和 android:requiredAccountType 不同的是该属性若是设置了后,将会容许受限用户访问机主的该帐户,若是应用程序须要使用 Account 而且容许受限用户访问主帐户,本属性值必须与应用程序的帐户认证类型(由 AuthenticatorDescription 定义)吻合,好比“com.google”。默认值为 null ,表示应用程序不须要 任何帐户就能够运行。

  提醒:设置本属性将容许受限用户经过主帐户使用你的应用程序,这可能会泄露我的身份信息。 若是帐户可能会泄露我的信息,请勿使用本属性,而是使用 android:requiredAccountType 属性,以禁止受限用户的使用。

android:resizeableActivity

  android:resizeableActivity=[“true” | “false”]

  这个标识用来代表应用是否支持分屏操做,这个标识能够设置在 < activity > 或者 标签上。若是把这个属性设置为 true,用户就能把这个应用或者 activity 设置为分屏或者自由模式,若是这个标识设置为 false,该应用或者 activity 将不支持多窗口的分屏模式,若是用户试图使用分屏模式打开该 activity,这个应用也只会充满整个屏幕。

  若是你应用的 targetAPI 是 24 版本或者更高,虽然你没有显示的声明该标识的值,这个标识的默认值为 true。这个标识是在 API24 版本添加。

android:supportsRtl

  android:supportsRtl=[“true” | “false”]

  这个标识是用来声明应用是否要支持从右到左的(RTL)布局方式。

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

android:taskAffinity

  android:taskAffinity=”string”

  该标识将会对应用的全部 activity 生效,除非该 activity 设置了本身单独的 taskAffinity 。通常状况下,在没有显示设置该标识的状况下,应用的全部 activity 都有同一个 affinity ,该 affinity 名字默认为 package 的名字。

  关于 taskAffinity 和 launchMode 的详细介绍和用法能够看看个人这篇博客:android深刻解析Activity的launchMode启动模式,Intent Flag,taskAffinity

android:testOnly

  android:testOnly=[“true” | “false”]

  该标识用来指明这个应用是否是仅仅做为测试的用途,好比,本应用程序可能会暴露一些不属于本身的功能或数据,这将引起安全漏洞,但对测试而言这又很是有用,并且这种应用程序只能经过 adb 进行安装。

android:theme

  android:theme=”resource or theme”

  这个标识用来声明这个应用的全部 activity 的主题,单独的一个 activity 能够声明本身的 theme 主题来覆盖默认的属性,具体的能够查看 google 的官方文档:样式和主题

android:uiOptions

  android:uiOptions=[“none” | “splitActionBarWhenNarrow”]

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

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

这个标识在 API14 版本添加,通常状况下不多会用到这个标识,我曾经只在魅族手机的适配过程当中用到了这个标识,想要了解详细的适配,能够去看看 google 官方的官方教程添加应用栏

android:usesCleartextTraffic

  android:usesCleartextTraffic=[“true” | “false”]

  这个标识为 API23 版本也就是 Android M 添加,它用来指明应用是否须要使用明文的网络链接,例如明文的 HTTP 链接,这个标识的默认值为 true。

  当这个标识设置为 false 的时候,平台的组件(例如,HTTP 和 FTP 栈,DownloadManagerMediaPlayer)将会拒绝应用使用明文的请求。第三方的库强烈建议也遵照这个设置,避免使用明文请求链接的核心缘由是会缺乏机密性,可靠性,并且能够保护请求不受到恶意的篡改:一个网络攻击者可能会监听网络传输的数据,并且可以在不被检测的状况下修改这些数据。

  固然这个标识也只是在最理想的状况下去遵照的,由于考虑到 Android 应用被提供的使用等级,是不可能避免他们全部的明文请求。例如,Socket API 就不必定须要遵照这个标识,由于它也不能决定这个连接是否是明文。然而,多数的应用网络请求链接都被高层次的网络栈/组件所处理,而这些栈/组件能够经过读取 ApplicationInfo.flags 或者 NetworkSecurityPolicy.isCleartextTrafficPermitted()来遵照这个标识。

  须要注意的是 WebView 不须要遵照这个标识。在 app 的开发过程当中,也可使用 StrictMode 来检测明文的请求链接,使用方式为 StrictMode.VmPolicy.Builder.detectCleartextNetwork().

  当usesCleartextTraffic被设置为false,应用程序会在使用HTTP而不是HTTPS时崩溃。

  在 API24 也就是 Android 7.0 及以上版本中,若是配置了 Android Network Security ,那么这个标识将会被自动忽略。

android:vmSafeMode

  android:vmSafeMode=[“true” | “false”]

  这个标识用来指明这个应用是否想让 VM 虚拟机运行在安全模式,默认值为 false,这个标识是 API8 版本添加,若是设置为 true 将会禁用 Dalvik just-in-time(JIT)编译器,这个标识在 API22 版本以后为新版本作了改进,由于 4.4 以后 Dalvik 虚拟机就被废弃了,在 22 版本以后这个标识若是设置为 true 将会禁用 ART ahead-of-time(AOT)编译器。

  详细的能够看看这篇介绍:ART、JIT、AOT、Dalvik之间有什么关系?

Activity 标签

android:allowEmbedded

  android:allowEmbedded=[“true” | “false”]

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

android:allowTaskReparenting

  android:allowTaskReparenting=[“true” | “false”]

  这个标示和 Application 的标识意义同样,因此若是同时声明该标识,这个标识会覆盖 Application 的标识,

android:alwaysRetainTaskState

  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:autoRemoveFromRecents

  android:autoRemoveFromRecents=[“true” | “false”]

  这个标识为 API21 版本添加,由具备该属性的 Activity 启动的任务是否一直保留在概览屏幕中,直至任务中的最后一个 Activity 完成为止。 若为 true,则自动从概览屏幕中移除任务。 它会替换调用方使用的 FLAG_ACTIVITY_RETAIN_IN_RECENTS。 它必须是布尔值“true”或“false”。

android:banner

  android:banner=”drawable resource”

  这个和 application 里面的 banner 标识同样,也是用在 android TV 上的,在这里也不详细介绍了,能够去看看 google 官方文档

android:clearTaskOnLaunch

  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

  android:configChanges=[“mcc”, “mnc”, “locale”,

“touchscreen”, “keyboard”, “keyboardHidden”,

“navigation”, “screenLayout”, “fontScale”,

“uiMode”, “orientation”, “screenSize”,

“smallestScreenSize”]

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

android:documentLaunchMode

全部这些配置变动均可能影响应用看到的资源值。 所以,调用 onConfigurationChanged() 时,一般有必要再次获取全部资源(包括视图布局、可绘制对象等),以正确处理变化。

  咱们日常接触到最多的就是屏幕的旋转,屏幕的旋转若是在没有特殊设置的状况下会销毁当前的 Activity 从新建立一个新的,为了不建立新的,就能够在 AndroidMainfest.xml 中对指定 Activity 对应的 配置android:configChanges=”orientation”,这样,每次旋转方向时,只有 onConfigurationChanged 方法被调用,没有了销毁重建的过程。

android:documentLaunchMode

  android:documentLaunchMode=[“intoExisting” | “always” |

“none” | “never”]


  指定每次启动任务时应如何向其中添加新的 Activity 实例。 该属性容许用户让多个来自同一应用的文档出如今概览屏幕(recent app)中。该属性有四个值,会在用户使用该应用打开文档时产生如下效果:

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

注:对于除“none”和“never”之外的值,必须使用 launchMode=”standard” 定义 Activity。 若是未指定此属性,则使用 documentLaunchMode=”none”。

感兴趣的也能够看看android深刻解析Activity的launchMode启动模式,Intent Flag,taskAffinity博客中对于FLAG_ACTIVITY_NEW_DOCUMENTFLAG_ACTIVITY_MULTIPLE_TASK 标志的介绍。


android:enabled

  android:enabled=[“true” | “false”]

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

  上面提到了 元素具备本身的 enabled 属性,该属性适用于全部应用组件,包括 Activity。 和 属性必须都是“true”(由于它们都默认使用该值),系统才能将 Activity 实例化。 若是任何一个属性是“false”,则没法进行实例化。

android:excludeFromRecents

  android:excludeFromRecents=[“true” | “false”]

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

android:exported

  android:exported=[“true” | “false”]

  该标识用来指明Activity 是否可由其余应用的组件启动 —“true”表示能够,“false”表示不能够。若为“false”,则 Activity 只能由同一应用的组件或使用同一用户 ID 的不一样应用启动。

  须要注意的是该默认值取决于 Activity 是否包含 Intent 过滤器。没有任何过滤器意味着 Activity 只能经过指定其确切的类名称进行调用。 这意味着 Activity 专供应用内部使用(由于其余应用不知晓其类名称)。 所以,在这种状况下,默认值为“false”。另外一方面,至少存在一个过滤器意味着 Activity 专供外部使用,所以默认值为“true”。

  该属性并不是限制 Activity 对其余应用开放度的惟一手段。 您还能够利用权限来限制哪些外部实体能够调用 Activity(请参阅 permission 属性),具体的也能够看看android permission权限与安全机制解析(上)android permission权限与安全机制解析(下)这两篇博客,详细描述了权限的相关。

  这个标识的使用例子能够参考android IPC通讯(上)-sharedUserId&&Messenger

android:finishOnTaskLaunch

  android:finishOnTaskLaunch=[“true” | “false”]

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

android:hardwareAccelerated

  android:hardwareAccelerated=[“true” | “false”]

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

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

  从 Android 3.0 开始,为应用提供了硬件加速 OpenGL 渲染器,以改善许多常见 2D 图形运算的性能。 启用硬件加速渲染器时,Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的大多数运算都会获得加速。这能够提升动画、滚动的流畅度和整体响应速度,即使是并不明确使用框架 OpenGL 库的应用也会受益。 因为启用硬件加速会增长资源消耗,所以您的应用将占用更多内存。

  须要注意的是,并不是全部 OpenGL 2D 运算都会获得加速。若是您启用硬件加速渲染器,请对应用进行测试,以确保其在利用渲染器时不会出错。

android:icon

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

  必须将该属性设置为对包含图像定义的可绘制资源的引用。 若是未设置该属性,则改成使用为应用总体指定的图标(请参阅 元素的 icon 属性),activity 的该属性会覆盖 application 的该属性。这个 Activity 的图标 — 不管设置于此处仍是由 元素设置 — 同时也是 Activity 全部 Intent 过滤器的默认图标(请参阅 元素的 icon 属性)。

android:label

  android:label=”string resource”

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

  这个 Activity 的标签 — 不管设置于此处仍是由 元素设置 — 同时也是 Activity 全部 Intent 过滤器的默认标签(请参阅 元素的 label 属性)。应将该标签设置为对字符串资源的引用,以即可以像用户界面中的其余字符串那样进行本地化。不过,为便于开发应用,也可将其设置为原始字符串。

android:launchMode

  android:launchMode=[“standard” | “singleTop” | “singleTask” | “singleInstance”]

 详情请看这篇博客,介绍的很是清楚android深刻解析Activity的launchMode启动模式,Intent Flag,taskAffinity

android:maxRecents

  android:maxRecents=”integer”

  该标识用来指明概览屏幕中位于此 Activity 根位置的任务数上限。 达到该条目数时,系统会从概览屏幕中移除最近最少使用的实例。 有效值为 1-50(低内存设备使用 25);0 为无效值。 该值必须是整数,例如 50。默认值为 16。

android:multiprocess

  android:multiprocess=[“true” | “false”]

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

  正常状况下,新的 Activity 实例会启动到定义它的应用进程内,所以全部 Activity 实例都在同一进程内运行。 不过,若是该标志设置为“true”,Activity 实例即可在多个进程内运行,这样系统就能在任何使用实例的地方建立实例(前提是权限容许这样作),可是貌似使用的场景和案例不是不少。

android:name

  android:name=”string”

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

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

android:noHistory

  android:noHistory=[“true” | “false”]

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

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

android:parentActivityName

  android:parentActivityName=”string”

  Activity 逻辑父项的类名称。此处的名称必须与为相应 元素的 android:name 属性指定的类名称一致。系统会读取该属性,以肯定当用户按下操做栏中的“向上”按钮时应该启动哪个 Activity。 系统还能够利用这些信息经过 TaskStackBuilder 合成 Activity 的返回栈。

  要支持 API 级别 4 - 16,您还可使用为 “android.support.PARENT_ACTIVITY” 指定值的 元素来声明父 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>复制代码

关于向上导航的详细信息,能够看看 Providing Up Navigation,关于用处能够看看:android 特殊用户通知用法汇总–Notification源码分析

  该属性为 API16 版本引入。

android:permission

  android:permission=”string”

  具体的能够看看android permission权限与安全机制解析(上)android permission权限与安全机制解析(下)

android:process

  android:process=”string”

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

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

android:relinquishTaskIdentity

  Activity 是否将其任务标识符交给任务栈中在其之上的 Activity。 若是任务根 Activity 的该属性设置为“true”,则任务会用其内的下一个 Activity 的 Intent 替换基本 Intent。 若是下一个 Activity 的该属性也设置为“true”,则该 Activity 会将基本 Intent 给予其在同一任务中启动的任何 Activity。 系统继续为每一个 Activity 执行此过程,直至遇到的某个 Activity 将该属性设置为“false”为止。 默认值为“false”。

  还有一个颇有意思的功能是,若是该属性设置为“true”,则 Activity 还可利用 ActivityManager.TaskDescription 来更改概览屏幕中的标签、颜色和图标。

android:resizeableActivity

  android:resizeableActivity=[“true” | “false”]

  这个标识和 里面的做用同样,若是在 activity 里面定义的话则表明这个 activity 是否支持分屏模式。若是您将该属性设置为 true,则用户能够分屏和自由形状模式启动 Activity。 若是您将该属性设置为 false,Activity 将不支持多窗口模式。 若是该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。

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

android:screenOrientation

  android:screenOrientation=[“unspecified” | “behind” |

“landscape” | “portrait” |

“reverseLandscape” | “reversePortrait” |

“sensorLandscape” | “sensorPortrait” |

“userLandscape” | “userPortrait” |

“sensor” | “fullSensor” | “nosensor” |

“user” | “fullUser” | “locked”]

  Activity 在设备上的显示方向。若是 Activity 是在多窗口模式下运行,系统会忽略该属性。它的取值能够是以下:

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”,则您的应用将只提供给支持横向方向的设备。 不过,您还应经过 元素明确声明,您的应用要求采用纵向或横向方向。 例如,。这纯粹是 Google Play(以及其余支持它的服务)提供的一种过滤行为,平台自己并不能控制当设备仅支持特定方向时您的应用可否安装。


android:stateNotNeeded

  android:stateNotNeeded=[“true” | “false”]

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

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

android:supportsPictureInPicture

  android:supportsPictureInPicture=[“true” | “false”]

  指定 Activity 是否支持画中画显示,设置该属性的同时,须要将 android:resizeableActivity 标识设置为 true,要否则系统会忽略该属性,能够看到设置完该属性以后,android TV 就能够实现手机端一个悬浮 activity 的效果,相似于 youtube 。

  因此一样这个标识和 android:resizeableActivity 同样都是 API24 版本添加的。

android:taskAffinity

  android:taskAffinity=”string”

  这个标识用来指明一个 Activity 的亲和性,使用方案能够看看个人博客:android深刻解析Activity的launchMode启动模式,Intent Flag,taskAffinity。从概念上讲,具备相同亲和关系的 Activity 归属同一任务(从用户的角度来看,则是归属同一“应用”)。 任务的亲和关系由其根 Activity 的亲和关系肯定。亲和关系肯定两件事 - Activity 更改到的父项任务(请参阅上面提到的 allowTaskReparenting 属性)和经过 FLAG_ACTIVITY_NEW_TASK 标志启动 Activity 时将用来容纳它的任务。默认状况下,应用中的全部 Activity 都具备相同的亲和关系。您能够设置该属性来以不一样方式组合它们,甚至能够将在不一样应用中定义的 Activity 置于同一任务内。 要指定 Activity 与任何任务均无亲和关系,请将其设置为空字符串。若是未设置该属性,则 Activity 继承为应用设置的亲和关系(能够参考 元素的 taskAffinity 属性),应用默认亲和关系的名称是 元素设置的 packageName。

android:theme

  android:theme=”resource or theme”

  这个标识用的应该不少了,用来定义一个 activity 的样式,为一个资源的引用,它会自动将 Activity 的上下文设置为使用该主题(请参阅 setTheme()),它还能够引起 Activity 启动前的“启动”动画(以更加符合 Activity 的实际外观)。若是未设置该属性,则 Activity 继承经过 application 元素的 theme 属性为应用总体设置的主题。 若是该属性也未设置,则使用默认系统主题。具体的能够看一下开发指南:样式和主题

  关于 theme 的实战能够看看博客:android 自定义状态栏和导航栏分析与实现

android:uiOptions

  android:uiOptions=[“none” | “splitActionBarWhenNarrow”]

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

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

该标识为 API14 版本增长,具体的能够查看 action bar 的官方文档:Adding the App Bar

android:windowSoftInputMode

  android:windowSoftInputMode=[“stateUnspecified”,

“stateUnchanged”, “stateHidden”,

“stateAlwaysHidden”, “stateVisible”,

“stateAlwaysVisible”, “adjustUnspecified”,

“adjustResize”, “adjustPan”]

  这个标识用来设置 Activity 的主窗口与包含屏幕软键盘的窗口的交互方式,这个属性的设置影响两个方面:

  • 当 Activity 成为用户注意的焦点时软键盘的状态 — 隐藏仍是可见。
  • 对 Activity 主窗口所作的调整 — 是否将其尺寸调小觉得软键盘腾出空间,或者当窗口部分被软键盘遮挡时是否平移其内容以使当前焦点可见。
该设置必须是下表所列的值之一,或者是一个“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 主窗口的尺寸来为软键盘腾出空间, 而是自动平移窗口的内容,使当前焦点永远不被键盘遮盖,让用户始终都能看到其输入的内容。 这一般不如尺寸调正可取,由于用户可能须要关闭软键盘以到达被遮盖的窗口部分或与这些部分进行交互。

引用


blog.sina.com.cn/s/blog_48d4…

developer.android.com/guide/topic…

developer.android.com/guide/topic…

相关文章
相关标签/搜索