<アクティビティ>

構文:
<activity android:allowEmbedded=["true" | "false"]
          android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:autoRemoveFromRecents=["true" | "false"]
          android:banner="drawable resource"
          android:clearTaskOnLaunch=["true" | "false"]
          android:colorMode=[ "hdr" | "wideColorGamut"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale",
                                 "uiMode", "orientation", "density",
                                 "screenSize", "smallestScreenSize"]
          android:directBootAware=["true" | "false"]
          android:documentLaunchMode=["intoExisting" | "always" |
                                  "none" | "never"]
          android:enabled=["true" | "false"]
          android:enabledOnBackInvokedCallback=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]
          android:icon="drawable resource"
          android:immersive=["true" | "false"]
          android:label="string resource"
          android:launchMode=["standard" | "singleTop" |
                              "singleTask" | "singleInstance" | "singleInstancePerTask"]
          android:lockTaskMode=["normal" | "never" |
                              "if_whitelisted" | "always"]
          android:maxRecents="integer"
          android:maxAspectRatio="float"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:parentActivityName="string" 
          android:persistableMode=["persistRootOnly" | 
                                   "persistAcrossReboots" | "persistNever"]
          android:permission="string"
          android:process="string"
          android:relinquishTaskIdentity=["true" | "false"]
          android:resizeableActivity=["true" | "false"]
          android:screenOrientation=["unspecified" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "userLandscape" | "userPortrait" |
                                     "sensor" | "fullSensor" | "nosensor" |
                                     "user" | "fullUser" | "locked"]
          android:showForAllUsers=["true" | "false"]
          android:stateNotNeeded=["true" | "false"]
          android:supportsPictureInPicture=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
    ...
</activity>
上位の要素:
<application>
含めることのできる要素:
<intent-filter>
<meta-data>
<layout>
説明:
アプリのビジュアル ユーザー インターフェースの一部を実装するアクティビティ(Activity サブクラス)を宣言します。アクティビティはすべて、マニフェスト ファイルの <activity> 要素で表す必要があります。宣言されていないものはシステムで確認できず、実行されることはありません。
属性:
android:allowEmbedded
子アクティビティがコンテナ内にある場合に(Display が別のアクティビティで所有されている場合など)、アクティビティが別のアクティビティの埋め込み子として起動できるかどうかを示します。たとえば、Wear のカスタム通知に使用されるアクティビティでこれを宣言すると、コンテキスト ストリームが別のプロセスに存在する場合でも Wear はアクティビティを表示できます。

この属性のデフォルト値は false です。

android:allowTaskReparenting
タスクが次に前面に出たときに、そのアクティビティが、起動したタスクからアフィニティを持つタスクに移動できるかどうか。移動できる場合は "true"、開始時のタスクに残っている場合は "false" です。

この属性が設定されていない場合、<application> 要素の対応する allowTaskReparenting 属性によって設定された値がアクティビティに適用されます。デフォルト値は "false" です。

通常、アクティビティが起動すると、それを起動したアクティビティのタスクに関連付けられ、全期間を通してそのまま留まります。この属性を使用すると、現在のタスクが表示されなくなったとき、強制的に親をアフィニティのあるタスクに変更できます。通常これは、アプリのアクティビティを、そのアプリに関連するメインタスクに移動させるために使用します。

たとえば、メール メッセージにウェブページへのリンクが含まれている場合、そのリンクをクリックすると、ページを表示できるアクティビティが表示されます。このアクティビティはブラウザアプリによって定義されますが、メールタスクの一部として起動します。親がブラウザタスクに変更されると、ブラウザが次に前面に出たときに表示され、メールタスクが再び前面に出たときには表示されません。

アクティビティのアフィニティは、taskAffinity 属性で定義します。タスクのアフィニティは、ルート アクティビティのアフィニティを読み取ることで決定されます。したがって、定義上、ルート アクティビティは常に同じアフィニティを持つタスクに含まれています。起動モードが "singleTask" または "singleInstance" であるアクティビティは、タスクのルートにしか配置できないため、親の変更は "standard" モードと "singleTop" モードに限られます(launchMode 属性もご覧ください)。

android:alwaysRetainTaskState
アクティビティが含まれるタスクの状態が、常にシステムによって維持されるかどうか。維持される場合は "true"、特定の状況においてシステムがタスクを初期状態にリセットできる場合は "false"。デフォルト値は "false" です。この属性は、タスクのルート アクティビティに対してのみ意味を持ちます。他のすべてのアクティビティでは無視されます。

通常、ユーザーがホーム画面からそのタスクを再度選択すると、システムはタスクを消去し、特定の状況においては、ルート アクティビティより上のスタックからすべてのアクティビティを削除します。これは一般に、ユーザーが一定時間(30 分間など)タスクにアクセスしなかった場合に行われます。

ただし、この属性が "true" の場合、アクセス方法に関係なく、ユーザーは常に最新の状態でタスクに戻ります。これは、複数の開いているタブなど、ユーザーが失いたくないような状態が多くあるウェブブラウザなどのアプリに有効です。

android:autoRemoveFromRecents
この属性を持つアクティビティによって起動したタスクが、タスクの最後のアクティビティが完了するまで履歴画面に残るかどうか。true の場合、タスクは履歴画面から自動的に削除されます。これは呼び出し元の FLAG_ACTIVITY_RETAIN_IN_RECENTS の使用をオーバーライドします。ブール値("true" または "false")を指定する必要があります。
android:banner
関連アイテム用の拡張型グラフィカル バナーを実現するドローアブル リソース<activity> タグと併用した場合、特定のアクティビティに対してデフォルトのバナーを提供します。<application> タグと併用した場合、すべてのアクティビティに対してバナーを提供します。

システムはバナーを使用して Android TV のホーム画面にアプリを表示します。バナーの表示はホーム画面に限られるため、バナーを指定するのは CATEGORY_LEANBACK_LAUNCHER インテントを処理するアクティビティを備えたアプリのみです。

この属性は、"@drawable/banner" などの画像を含むドローアブル リソースへの参照として設定されます。デフォルトのバナーはありません。

詳細については、「TV アプリの作成を開始する」のホーム画面にバナーを配置するセクションをご覧ください。

android:clearTaskOnLaunch
ホーム画面から再起動するときに、ルート アクティビティを除くすべてのアクティビティがタスクから削除されるかどうか。タスクが常にルート アクティビティまで縮小される場合は "true"、そうでない場合は "false" です。デフォルト値は "false" です。この属性は、新しいタスクを開始するアクティビティ(ルート アクティビティ)に対してのみ意味を持ちます。タスクの他のあらゆるアクティビティでは無視されます。

値が「"true"」の場合、ユーザーがタスクを開始するたびに、タスクでの最後の操作に関係なく、またユーザーが戻るボタンやホームボタンを使用してタスクを離れたかどうかは関係なく、ルート アクティビティに移動します。値が "false" の場合、状況によってはアクティビティからタスクを削除できますが、常にそうなるとは限りません。詳細については、alwaysRetainTaskState 属性をご覧ください。

ユーザーがホーム画面からアクティビティ P を起動し、そこからアクティビティ Q に移動したとします。次に、ホームボタンをタップしてアクティビティ P に戻ります。通常はアクティビティ Q が表示されます(これが P のタスクでの最後の操作であるため)。ただし、P がこのフラグを "true" に設定すると、ユーザーがホーム画面からアクティビティ P を起動したときに、その上にあるアクティビティ(この場合は Q)がすべて削除されます。そのため、タスクに戻ったときユーザーには P のみが表示されます。

この属性と allowTaskReparenting がどちらも "true" である場合、親を変更できるアクティビティは、アフィニティを共有するタスクに移動します。その後、残りのアクティビティは破棄されます。

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED が設定されていない場合、この属性は無視されます。

android:colorMode

アクティビティの色モードを指定します。指定する場合は、hdr または wideColorGamut のいずれかになります。

hdr の場合、ハイ ダイナミック レンジをサポートしているデバイスではアクティビティをハイ ダイナミック レンジで表示するようにリクエストします。

wideColorGamut の場合、対応デバイスでアクティビティを色域モードで表示するようにリクエストします。広色域モードでは、SRGB 色域以外をウィンドウでレンダリングして、より鮮やかな色を表示できます。デバイスで広色域レンダリングがサポートされていない場合、この属性は機能しません。広色域モードでのレンダリングの詳細については、広色域コンテンツによるグラフィックの強化をご覧ください。

android:configChanges
アクティビティ自体が処理する構成の変更をリストします。実行時に構成の変更が発生すると、デフォルトではアクティビティのシャットダウンと再起動が行われますが、この属性で構成を宣言すると、アクティビティが再起動されなくなります。代わりに、アクティビティは実行されたままとなり、その onConfigurationChanged() メソッドが呼び出されます。

注: この属性はアプリケーションのパフォーマンスとレスポンシブを改善する特殊なケースでのみ使用してください。詳細については、構成の変更に対処するをご覧ください。

次の文字列は、この属性の有効な値です。複数の値がある場合は、"locale|navigation|orientation" のように | で区切られます。

説明
"density" 表示密度の変更(ユーザーが異なるディスプレイ スケールを指定したときや、異なるディスプレイがアクティブになったときなど)。

API レベル 24 で追加されました

"fontScale" フォントのスケーリング ファクタの変更(ユーザーが新しいグローバル フォントサイズを選択したときなど)。
"keyboard" キーボードの種類の変更(ユーザーが外部キーボードを接続したときなど)。
"keyboardHidden" キーボードのユーザー補助の変更(ユーザーがハードウェア キーボードを表示したときなど)。
"layoutDirection" レイアウト方向の変更(左から右(LTR)を右から左(RTL)に変更するなど)。

API レベル 17 で追加されました

"locale" ロケールの変更(ユーザーがテキストを表示する新しい言語を選択したときなど)。
"mcc" IMSI モバイル カントリー コード(MCC)の変更(MCC を更新する SIM が検出された場合)。
"mnc" IMSI モバイル ネットワーク コード(MNC)の変更(MNC を更新する SIM が検出された場合)。
"navigation" ナビゲーション タイプ(トラックボールまたは D-pad)への TA の変更。通常、このようなことは起こりません。
"orientation"

画面方向の変更(ユーザーがデバイスを回転させたときなど)。

注: アプリが Android 3.2(API レベル 13)以上を対象としている場合は、"screenLayout""screenSize" の構成も宣言します。これは、デバイスの画面を縦向きや横向きに切り替えると、画面レイアウトと画面サイズも変わることがあるためです。

"screenLayout" 画面レイアウトの変更(別のディスプレイがアクティブになったときなど)。
"screenSize" 現在使用可能な画面サイズの変更。

これは、現在のアスペクト比に応じて、現在使用可能なサイズが変更されたことを表します。ユーザーが横向きと縦向きを切り替えると変わります。

API レベル 13 で追加されました

"smallestScreenSize" 物理画面サイズの変更。

これは向きに関係なくサイズが変更されたことを表しているため、外部ディスプレイへの切り替えなど、実際の物理画面サイズが変更された場合にのみ変わります。この構成への変更は、smallestWidth 構成での変更に対応しています。

API レベル 13 で追加されました

"touchscreen" タッチスクリーンの変更。通常、このようなことは起こりません。
"uiMode" ユーザー インターフェース モードの変更(ユーザーがデバイスをデスクやカーホルダーに置いたとき、夜間モードが変更されたときなど)。各種 UI モードの詳細については、UiModeManager をご覧ください。

API レベル 8 で追加されました

これらの構成の変更はすべて、アプリが示すリソース値に影響を与える可能性があります。そのため、onConfigurationChanged() が呼び出されたときは、変更を正しく処理するために、通常はビュー レイアウトやドローアブルなどのリソースをすべて再取得する必要があります。

注: マルチウィンドウに関連する構成の変更をすべて処理するには、"screenLayout""smallestScreenSize" の両方を使用します。マルチウィンドウは Android 7.0(API レベル 24)以降でサポートされています。

android:directBootAware

アクティビティがダイレクト ブートに対応しているかどうか、つまり、ユーザーがデバイスのロックを解除する前にアクティビティを実行できるかどうか。

注: ダイレクト ブート中、アプリのアクティビティはデバイス保護ストレージに保存されているデータにのみアクセスできます。

デフォルト値は "false" です。

android:documentLaunchMode
起動するたびに、アクティビティの新しいインスタンスをタスクに追加する方法を指定します。この属性により、ユーザーは同じアプリの複数のドキュメントを履歴画面に表示できます。

この属性には 4 つの値があり、ユーザーがアプリでドキュメントを開いたときに次のような効果をもたらします。

説明
"intoExisting" システムは、ベース インテントの ComponentName とデータ URI が起動インテントのものと一致するタスクを検索します。そのようなタスクが見つかると、システムはタスクを消去し、ルート アクティビティで onNewIntent(android.content.Intent) への呼び出しを受け取って再起動します。タスクが見つからない場合、システムは新しいタスクを作成します。
"always" すでにドキュメントが開いている場合でも、アクティビティはドキュメント用に新しいタスクを作成します。これは、FLAG_ACTIVITY_NEW_DOCUMENT フラグと FLAG_ACTIVITY_MULTIPLE_TASK フラグを両方設定する場合と同じです。
"none" アクティビティは、アクティビティ用に新しいタスクを作成することはありません。これがデフォルト値です。FLAG_ACTIVITY_NEW_TASK が設定されている場合にのみ、新しいタスクが作成されます。履歴画面では、アクティビティはデフォルトとして扱われます。つまり、ユーザーが最後に実行したアクティビティから再開するアプリに対して、タスクを 1 つ表示します。
"never" インテントに FLAG_ACTIVITY_NEW_DOCUMENT が含まれていても、アクティビティが新しいドキュメントで起動されることはありません。これを設定すると、FLAG_ACTIVITY_NEW_DOCUMENT フラグと FLAG_ACTIVITY_MULTIPLE_TASK フラグのいずれかがアクティビティに設定されている場合、その動作がオーバーライドされます。履歴画面にアプリのタスクが 1 つ表示され、ユーザーが最後に呼び出したアクティビティから再開します。

注: "none""never" 以外の値の場合、アクティビティは launchMode="standard" で定義されます。この属性が指定されていない場合、documentLaunchMode="none" が使用されます。

android:enabled
システムがアクティビティをインスタンス化できるかどうか。できる場合は "true"、できない場合は "false" です。デフォルト値は "true" です。

<application> 要素には、アクティビティを含むすべてのアプリ コンポーネントに適用される独自の enabled 属性があります。システムがアクティビティをインスタンス化できるようにするには、<application> 属性と <activity> 属性の両方を "true"(両属性のデフォルト値)に設定する必要があります。いずれかが "false" の場合、インスタンス化できません。

android:enableOnBackInvokedCallback
このフラグを使用すると、アクティビティ レベルで予測型システム アニメーションを有効にできます。この動作により、大規模なマルチアクティビティ アプリを予測型「戻る」ジェスチャーに移行しやすくなります。

android:enableOnBackInvokedCallback=false を設定すると、タグを設定した場所に応じて、アクティビティ レベルまたはアプリレベルで予測型「戻る」アニメーションがオフになり、OnBackInvokedCallback プラットフォーム API の呼び出しを無視するようシステムに指示します。

android:excludeFromRecents
このアクティビティによって開始されたタスクが履歴画面から除外されるかどうか。つまり、このアクティビティが新しいタスクのルート アクティビティである場合、この属性は、最近使用したアプリのリストにタスクが表示されるかどうかを決定します。タスクがリストから除外されている場合は "true"、含まれている場合は "false" です。デフォルト値は "false" です。

android:exported
他のアプリのコンポーネントでアクティビティを起動できるかどうか。

  • "true" の場合、アクティビティはどのアプリからもアクセスでき、正確なクラス名で起動できます。
  • "false" の場合、アクティビティは、同じアプリのコンポーネント、同じユーザー ID を持つアプリ、または特権システム コンポーネントでしか起動できません。これは、インテント フィルタがない場合のデフォルト値です。

アプリ内のアクティビティにインテント フィルタが含まれている場合は、この要素を "true" に設定して、他のアプリが開始できるようにします。たとえば、そのアクティビティがアプリのメイン アクティビティであり、categoryandroid.intent.category.LAUNCHER が含まれている場合。

この要素が "false" に設定され、アプリがアクティビティを開始しようとすると、システムは ActivityNotFoundException をスローします。

他のアプリに対してアクティビティの公開を制限する方法は、この属性以外にもあります。権限を使用して、アクティビティを呼び出すことができる外部エンティティを制限することもできます。permission 属性をご覧ください。

android:finishOnTaskLaunch
ユーザーがホーム画面でタスクを選択してタスクを再起動したとき、(ルート アクティビティ以外の)アクティビティの既存インスタンスがシャットダウンされるかどうか。シャットダウンされる場合は "true"、そうでない場合は "false" です。デフォルト値は "false" です。

この属性と allowTaskReparenting の両方が "true" の場合、この属性は他より優先されます。アクティビティのアフィニティは無視されます。アクティビティは親を変更されませんが、破棄されます。

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED が設定されていない場合、この属性は無視されます。

android:hardwareAccelerated
このアクティビティでハードウェア アクセラレーテッド レンダリングを有効にするかどうか。有効になっている場合は "true"、そうでない場合は "false"。デフォルト値は "false" です。

Android 3.0 以降では、多くの一般的な 2D グラフィック処理のパフォーマンスを高めるため、アプリ内でハードウェア アクセラレーテッド OpenGL レンダラを使用できるようになっています。ハードウェア アクセラレーテッド レンダラを有効にすると、Canvas、Paint、Xfermode、ColorFilter、Shader、Camera のほとんどの処理が高速化されます。

これにより、フレームワークの OpenGL ライブラリを明示的に利用しないアプリでも、アニメーションやスクロールがよりスムーズになり、全体的なレスポンスが向上します。ハードウェア アクセラレーションを有効にするために必要なリソースが増えるため、アプリの RAM 使用量が増えます。

必ずしもすべての OpenGL 2D 処理が高速化されるわけではありません。ハードウェア アクセラレーテッド レンダラを有効にする場合は、エラーなくアプリがレンダラを使用できるかどうかをテストします。

android:icon
アクティビティを表すアイコン。画面上でアクティビティを表す必要がある場合に、このアイコンが表示されます。たとえば、タスクを開始するアクティビティのアイコンが、ランチャー ウィンドウに表示されます。多くの場合、アイコンにはラベルが伴います。ラベルの詳細については、android:label 属性をご覧ください。

この属性は、画像の定義を含むドローアブル リソースへの参照として設定されます。この属性を設定しなかった場合、アプリ用に指定されているアイコンが代わりに使用されます。詳細については、<application> 要素の icon 属性をご覧ください。

アクティビティのアイコンは、この属性と <application> 要素のどちらで設定したかに関係なく、すべてのアクティビティのインテント フィルタのデフォルト アイコンにもなります。詳細については、<intent-filter> 要素の icon 属性をご覧ください。

android:immersive
現在のアクティビティに対し、没入モードを設定します。"true" の場合、実行時に setImmersive() メソッドを使用して没入モードを変更しても、ActivityInfo.flags メンバーには常に FLAG_IMMERSIVE ビットが設定されます。
android:label
ユーザーが読み取り可能なアクティビティのラベル。アクティビティをユーザーに示すときに、ラベルが画面に表示されます。多くの場合、アクティビティ アイコンとともに表示されます。この属性を設定しなかった場合、アプリ用に設定されているラベルが代わりに使用されます。<application> 要素の label 属性を参照してください。

アクティビティのラベルは、この属性と <application> 要素のどちらで設定したかに関係なく、アクティビティのすべてのインテント フィルタのデフォルト ラベルにもなります。詳細については、<intent-filter> 要素の label 属性をご覧ください。

ラベルは文字列リソースへの参照として設定します。そうすることで、ユーザー インターフェースの他の文字列と同じようにローカライズできるようになります。ただし、アプリ開発の便宜上、未加工の文字列として設定することもできます。

android:launchMode
アクティビティの起動方法についての説明。Intent オブジェクトのアクティビティ フラグ(FLAG_ACTIVITY_* 定数)と連携して、インテントを処理するためにアクティビティが呼び出されたときの動作を決定するモードが 5 つあります。

"standard"
"singleTop"
"singleTask"
"singleInstance"
"singleInstancePerTask"

デフォルトのモードは "standard" です。

次の表に示すように、モードは 2 つのグループに大別されます。"standard""singleTop" アクティビティ、そして "singleTask""singleInstance""singleInstancePerTask" アクティビティです。起動モードが "standard" または "singleTop" のアクティビティは、複数回インスタンス化できます。

インスタンスはどのタスクにも属すことができ、アクティビティ タスク内のどこにでも配置できます。通常は、startActivity() を呼び出したタスクで起動します。ただし、Intent オブジェクトに FLAG_ACTIVITY_NEW_TASK 命令が含まれる場合は別のタスクが選ばれます。詳細については、taskAffinity 属性をご覧ください。

一方、"singleTask""singleInstance""singleInstancePerTask" のアクティビティの動作は異なります。"singleInstancePerTask" は常にアクティビティ タスクのルートにあります。また、デバイスは "singleInstance" のインスタンスを一度に 1 つしか保持できませんが、"singleInstancePerTask アクティビティは、FLAG_ACTIVITY_MULTIPLE_TASKFLAG_ACTIVITY_NEW_DOCUMENT が設定されていれば、別のタスク内で複数回インスタンス化できます。

起動モードが "singleTask" のアクティビティは、"singleInstance" の動作と "singleInstancePerTask" の動作を組み合わせたもので、アクティビティを複数回インスタンス化でき、同じ taskAffinity タスク内の任意の場所に配置できます。一方でデバイスは、アクティビティ タスクのルートに "singleTask" アクティビティを配置するためのタスクを 1 つしか保持できません。

"standard" モードと "singleTop" モードでは異なる点が 1 つあります。"standard" アクティビティの新しいインテントが発生するたびに、そのインテントに応答するクラスの新しいインスタンスが作成されるのです。各インスタンスは 1 つのインテントを処理します。同様に、"singleTop" アクティビティの新しいインスタンスを作成して、新しいインテントを処理することもできます。

ただし、ターゲット タスクのスタックの一番上に、すでにアクティビティの既存のインスタンスがある場合、そのインスタンスは onNewIntent() 呼び出しで新しいインテントを受け取ります。新しいインスタンスは作成されません。それ以外では、"singleTop" アクティビティの既存のインスタンスがターゲット タスクにあるがスタックの一番上にはない場合、もしくは、スタックの一番上にあるがターゲット タスクにはない場合などは、新しいインスタンスが作成され、スタックに push されます。

同様に、ユーザーが現在のスタック上のアクティビティまで移動した場合、動作は親アクティビティの起動モードによって決まります。親アクティビティの起動モードが singleTop である場合(または up インテントに FLAG_ACTIVITY_CLEAR_TOP が含まれている場合)、親はスタックの一番上に移動し、その状態が保持されます。

ナビゲーション インテントは、親アクティビティの onNewIntent() メソッドで受け取ります。親アクティビティの起動モードが standard である場合、および up インテントに FLAG_ACTIVITY_CLEAR_TOP が含まれていない場合は、現在のアクティビティとその親は両方ともスタックからポップされ、親アクティビティの新しいインスタンスが作成されて、ナビゲーション インテントを受け取ります。

"singleInstance" モードも、"singleTask""singleInstancePerTask" と異なる点が 1 つだけあります。それはつまり、起動モードが "singleTask""singleInstancePerTask" であるアクティビティは、他のアクティビティ(必然的に "standard" アクティビティと "singleTop" アクティビティ)を、そのタスクの一部にできるということです。

一方、"singleInstance" アクティビティは、他のアクティビティをそのタスクの一部にはできません。タスク内の唯一のアクティビティである必要があります。別のアクティビティを起動すると、そのアクティビティは(FLAG_ACTIVITY_NEW_TASK がインテントに含まれていたかのように)別のタスクに割り当てられます。

ユースケース 起動モード 複数インスタンス? コメント
ほとんどのアクティビティで通常の起動 "standard" はい デフォルト。システムは常にターゲット タスクにアクティビティの新しいインスタンスを作成し、そのインスタンスにインテントを渡します。
"singleTop" 条件付き アクティビティのインスタンスがターゲット タスクの一番上にすでに存在する場合、システムはアクティビティの新しいインスタンスを作成するのではなく、onNewIntent() メソッドを呼び出して、インテントをそのインスタンスに渡します。
特殊な起動
(一般的な用途には推奨されません)
"singleTask" 条件付き システムは、新しいタスクのルートにそのアクティビティを作成するか、同じアフィニティを持つ既存のタスクにそのアクティビティを配置します。 アクティビティのインスタンスがすでに存在し、タスクのルートにある場合、システムは新しいインスタンスを作成せずに、onNewIntent() メソッドを呼び出して既存のインスタンスにインテントを渡します。
"singleInstance" × システムが、インスタンスを保持しているタスクで他のアクティビティを起動しないこと以外は、"singleTask" と同じです。アクティビティは常に、そのタスクの唯一のメンバーです。
"singleInstancePerTask" 条件付き アクティビティは、タスクのルート アクティビティ(タスクを最初に作成したアクティビティ)としてしか実行できないので、このアクティビティのインスタンスは、タスク内に 1 つしか存在しません。ただし、アクティビティは異なるタスクでは複数回インスタンス化できます。

上の表に示すように、"standard" はデフォルト モードであり、ほとんどの種類のアクティビティに適しています。"singleTop" も、さまざまなアクティビティで一般的に使用される有用な起動モードです。他のモード("singleTask""singleInstance""singleInstancePerTask")は、ほとんどのアプリに適していません。そのため、ユーザーに馴染みがなさそうなインタラクション モデルとなり、他のほとんどのアプリとは大きく異なります。

どの起動モードを選択しても、起動時のアクティビティと、[戻る] ボタンを使用して他のアクティビティやタスクから戻るときのアクティビティについては、必ずユーザビリティをテストしてください。

起動モードと Intent フラグの操作の詳細については、タスクとバックスタックをご覧ください。

android:lockTaskMode
デバイスがロックタスク モードで動作しているときに、システムがこのアクティビティをどのように表示するかを決定します。

Android では、ロックタスク モードという没入感のあるキオスク型の方法でタスクを実行できます。システムがロックタスク モードで動作しているとき、デバイス ユーザーは通常、通知を表示すること、許可リストに登録されていないアプリにアクセスすること、ホーム画面に戻ることはできません(Google Home アプリが許可リストに登録されている場合を除きます)。

システムがロックタスク モードになっているときは、Device Policy Controller(DPC)によって許可リストに登録されたアプリのみを実行できます。ただし、システムアプリと特権アプリは、許可リストに登録されていなくてもロックタスク モードで実行できます。

値には次のいずれかの R.attr.lockTaskMode 文字列値を指定できます。

説明
"normal" デフォルト値。これがデフォルト値です。タスクはロックタスク モードで起動しませんが、startLockTask() を呼び出すことでロックタスク モードに配置できます。
"never"

タスクが lockTask モードで起動せず、デバイス ユーザーは履歴画面からこれらのタスクを固定できません。

注: このモードは、システムアプリと特権アプリでしか利用できません。この値を指定した非特権アプリは、normal として扱われます。

"if_whitelisted" DPC が DevicePolicyManager.setLockTaskPackages() を使用してこのパッケージを承認する場合、このモードは always と同じです。ただし、最後のロックタスクである場合、終了前にアクティビティが stopLockTask() を呼び出す必要があるという点は異なります。DPC がこのパッケージを承認しない場合、このモードは normal と同じです。
"always"

このアクティビティをルートとするタスクは、常にロックタスク モードで起動します。このタスクの起動時にシステムがすでにロックタスク モードになっていた場合、新しいタスクは現在のタスクの上に起動します。このモードで起動したタスクは、finish() を呼び出すことでロックタスク モードを終了できます。

注: このモードは、システムアプリと特権アプリでしか利用できません。この値を指定した非特権アプリは、normal として扱われます。

この属性は API レベル 23 で導入されました。

android:maxRecents
履歴画面における、このアクティビティをルートとするタスクの最大数。エントリ数がこの数に達すると、システムは、最も長い間使用されていないインスタンスを履歴画面から削除します。有効な値は 1~50 の整数、またはメモリの少ないデバイスでは、1~25 の整数です。0 は無効です。デフォルト値は 16 です。
android:maxAspectRatio

アクティビティがサポートする最大アスペクト比。アプリがアスペクト比の大きいデバイスで実行される場合、システムはアプリを自動的にレターボックス表示し、画面の一部を未使用のままにして、指定された最大アスペクト比で実行できるようにします。

最大アスペクト比は、デバイスの長辺を短辺で割った除算結果を小数の形式で表したものです。たとえば、最大アスペクト比が 7:3 の場合は、この属性の値を 2.33 に設定します。

ウェアラブル デバイス以外では、この属性の値を 1.33 以上に設定する必要があります。ウェアラブル デバイスでは、1.0 以上に設定する必要があります。それ以外の設定値は、システムに無視されます。

注: アクティビティの resizeableActivity が true に設定されている場合、アクティビティがあらゆるサイズをサポートすることになるため、この属性は無視されます。

この属性の詳細については、最大アスペクト比を宣言するをご覧ください。

android:multiprocess
アクティビティのインスタンスを、それを起動したコンポーネントのプロセスで起動できるかどうか。起動できる場合は "true"、できない場合は "false" です。デフォルト値は "false" です。

通常、アクティビティの新しいインスタンスは、それを定義したアプリのプロセスで起動するため、アクティビティのインスタンスはすべて同じプロセスで実行されます。ただし、このフラグを "true" に設定すると、アクティビティのインスタンスは複数のプロセスで実行できるため、どこで使用する場合でも、権限が付与されれば、システムはインスタンスを作成できるようになります。これはほとんど必要性がなく、決して望ましいものではありません。

android:name
アクティビティを実装するクラスの名前(Activity のサブクラス)。属性値は通常、"com.example.project.ExtracurricularActivity" などの完全修飾クラス名です。ただし省略形として、".ExtracurricularActivity" のように名前の最初の文字をピリオドにした場合は、build.gradle ファイルで指定した名前空間に付加されます。

アプリの公開後は、android:exported="false" を設定しない限り、この名前を変更しないでください。デフォルト値はありません。名前の指定は必須です。

android:noHistory
ユーザーがアクティビティから離れて画面に表示されなくなった場合、finish() メソッドを呼び出して、アクティビティ スタックからアクティビティが削除され、完了したかどうか。終了している場合は "true"、していない場合は "false" です。デフォルト値は "false" です。

"true" は、アクティビティが履歴トレースを残さないことを意味します。タスクのアクティビティ スタックに残らないため、ユーザーはそのタスクに戻ることができません。この場合、このアクティビティの結果に対して別のアクティビティを開始しても、onActivityResult() が呼び出されることはありません。

この属性は API レベル 3 で導入されました。

android:parentActivityName
アクティビティの論理的な親のクラス名。ここでの名前は、対応する <activity> 要素の android:name 属性に与えたクラス名と一致する必要があります。

システムは、この属性を読み取って、ユーザーがアクションバーの上ボタンをタップしたときに開始するアクティビティを決定します。また、この情報を使用して、TaskStackBuilder でアクティビティのバックスタックを合成することもできます。

API レベル 4~16 をサポートするために、"android.support.PARENT_ACTIVITY" の値を指定する <meta-data> 要素で親アクティビティを宣言することもできます。

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

上方ナビゲーションをサポートする親アクティビティの宣言について、詳しくは、上方ナビゲーションの提供をご覧ください。

この属性は API レベル 16 で導入されました。

android:persistableMode

デバイスを再起動した後も、アクティビティのインスタンスを、それを含むタスク内で保持する方法を定義します。

タスクのルート アクティビティがこの属性の値を persistRootOnly に設定した場合、ルート アクティビティのみが保持されます。それ以外の場合は、タスクのバックスタックの上位にあるアクティビティが調べられ、この属性の値を persistAcrossReboots に設定したアクティビティがすべて保持されます。

この属性を使用する場合、値を次のいずれかに設定する必要があります。

説明
persistRootOnly デフォルト値。システムが再起動すると、アクティビティ タスクは保持されますが、ルート アクティビティの起動インテントのみが使用されます。

アプリの起動インテントがアプリのルート アクティビティを読み込むとき、アクティビティは PersistableBundle オブジェクトを受け取りません。そのため、デバイスを再起動した後もアプリのルート アクティビティの状態を保持するには、onSaveInstanceState() を使用しないでください。

注: この属性値は、アプリのルート アクティビティに対して設定されている場合にのみ、アプリの動作に影響します。

persistAcrossReboots

このアクティビティの状態は、persistableMode 属性が persistAcrossReboots に設定されたバックスタックより上位の各アクティビティの状態とともに保持されます。アクティビティの persistableMode 属性が persistAcrossReboots に設定されていない場合、またはアクティビティが Intent.FLAG_ACTIVITY_NEW_DOCUMENT フラグを使用して起動された場合、そのアクティビティと、上位のバックスタックのすべてのアクティビティは保持されません。

インテントが、アプリで persistableMode 属性が persistAcrossReboots に設定されているアクティビティを読み込むと、アクティビティはその onCreate() メソッドで PersistableBundle オブジェクトを受け取ります。そのため、persistableMode 属性が persistAcrossReboots に設定されている限り、onSaveInstanceState() を使用してデバイスの再起動後もアクティビティの状態を保持できます。

注: この属性値は、アプリのルート アクティビティ以外のアクティビティに対して設定されている場合でも、アプリの動作に影響します。

persistNever

アクティビティの状態は保持されません。

注: この属性値は、アプリのルート アクティビティに対して設定されている場合にのみ、アプリの動作に影響します。

この属性は API レベル 21 で導入されました。

android:permission
クライアントがアクティビティを起動する、またはインテントに応答するために必要となる権限の名前。startActivity() または startActivityForResult() の呼び出し元に指定の権限が付与されていない場合、そのインテントはアクティビティに渡されません。

この属性が設定されていない場合、<application> 要素の permission 属性で設定された権限がアクティビティに適用されます。どちらの属性も設定されていない場合、アクティビティは権限によって保護されません。

権限の詳細については、アプリ マニフェスト概要の権限のセクションとセキュリティに関するヒントをご覧ください。

android:process
アクティビティが実行されるプロセスの名前。通常、アプリ コンポーネントはすべて、そのアプリ用に作成されたデフォルト プロセス名で実行されます。この属性を使用する必要はありません。ただし、必要に応じて、この属性を使用してデフォルトのプロセス名をオーバーライドし、アプリ コンポーネントを複数のプロセスに分散できます。

この属性に割り当てられた名前がコロン(:)で始まる場合、必要に応じてアプリ専用の新しいプロセスが作成され、そのプロセス内でアクティビティが実行されます。

プロセス名が小文字で始まる場合、アクティビティはその名前のグローバル プロセス内で実行されます(その権限がある場合)。これにより、異なるアプリのコンポーネント間で 1 つのプロセスを共有して、リソース使用量を削減できます。

<application> 要素の process 属性では、すべてのコンポーネントに対して異なるデフォルトのプロセス名を設定できます。

android:relinquishTaskIdentity
アクティビティが、タスクスタック内の上位のアクティビティにタスク ID を譲渡するかどうか。ルート アクティビティのこの属性が "true" に設定されているタスクは、ベース Intent をタスク内の次のアクティビティのものに置き換えます。

その次のアクティビティでもこの属性が "true" に設定されている場合は、同じタスクで起動するすべてのアクティビティにベース Intent が生成されます。これは、この属性が "false" に設定されているアクティビティが見つかるまで、各アクティビティに対して継続されます。デフォルト値は "false" です。

この属性を "true" に設定すると、アクティビティは ActivityManager.TaskDescription を使用して、履歴画面のラベル、色、アイコンを変更できるようになります。

android:resizeableActivity

アプリがマルチ ウィンドウ モードをサポートするかどうかを指定します。この属性は <activity> 要素、または<application> 要素のいずれかで設定できます。

この属性を "true" に設定すると、ユーザーは、分割画面モードや自由形式モードでアクティビティを起動できるようになります。この属性を "false" に設定すると、マルチウィンドウ環境について、アプリのテストや最適化ができなくなります。ただし、アクティビティを互換性モードを適用したマルチウィンドウ モードにすることはできます。

この属性を "false" に設定しても、マルチウィンドウ モードの他のアプリが画面(ピクチャー イン ピクチャーなど)や他のディスプレイに表示されないとは限りません。したがって、このフラグを設定しても、アプリが排他的なリソースにアクセスできるわけではありません。

API レベル 24 以降をターゲットとしているアプリで、この属性に値を指定しなかった場合、属性の値はデフォルトで "true" になります。

API レベル 31 以降をターゲットとしているアプリの場合、この属性による動作は小画面と大画面で異なります。

  • 大画面(画面幅 600 dp 以上): すべてのアプリでマルチウィンドウ モードがサポートされます。この属性は、アプリのサイズ変更ができるかどうかを示します(アプリがマルチウィンドウ モードをサポートしているかどうかではありません)。resizeableActivity="false" の場合、ディスプレイの寸法に合わせるために必要なとき、アプリは画面互換性モードになります。
  • 小画面(画面幅 600 dp 未満): resizeableActivity="true" であり、かつアクティビティの最小幅と最小高がマルチウィンドウ要件の範囲内である場合、アプリはマルチウィンドウ モードをサポートします。resizeableActivity="false" の場合、アクティビティの最小幅と高さに関係なく、アプリはマルチウィンドウ モードをサポートしません。

注: デバイス メーカーは、API レベル 31 の動作をオーバーライドできます。

この属性は API レベル 24 で追加されました。

注: タスクのルート アクティビティ値は、タスク内で起動するすべての追加アクティビティに適用されます。つまり、タスクのルート アクティビティがサイズ変更可能である場合、システムは、タスク内にある他のすべてのアクティビティをサイズ変更可能なものとして扱います。ルート アクティビティがサイズ変更可能でない場合、タスク内の他のアクティビティはサイズを変更できません。

android:screenOrientation

デバイスのディスプレイ上のアクティビティの向き。

Android 7.0(API レベル 24)以降では、アクティビティがマルチウィンドウ モードの場合、この属性に対する実行時の変更は無視されます。

Android 12(API レベル 31)以降では、デバイス メーカーは個々のデバイス画面(たとえば、折りたたみ式デバイスのタブレット サイズ画面など)で、アプリが優先する画面の向きの指定を無視するよう設定し、縦向き専用のアプリを、横向きのディスプレイでも縦向きのままレターボックス化させることができます。アプリの向きが変わっても縦向きのアスペクト比が維持されるため、使いやすさが改善されています。

値には次のいずれかの文字列を指定できます。

"unspecified" デフォルト値。システムが画面の向きを選択します。使用するポリシー、つまり特定の状況における選択は、デバイスによって異なる場合があります。
"behind" アクティビティ スタック内で直下にあるアクティビティと同じ向き。
"landscape" 横向き(ディスプレイは横長)。
"portrait" 縦向き(ディスプレイは縦長)。
"reverseLandscape" 通常の横向きとは反対方向の横向き。API レベル 9 で追加されました。
"reversePortrait" 通常の縦向きとは反対方向の縦向き。API レベル 9 で追加されました。
"sensorLandscape" 横向き。ただし、デバイス センサーに基づいて通常の横向きか逆の横向きになります。ユーザーがセンサーベースの回転をロックしている場合でも、センサーが使用されます。API レベル 9 で追加されました。
"sensorPortrait" 縦向き。ただし、デバイス センサーに基づいて通常の縦向きか逆の縦向きになります。ユーザーがセンサーベースの回転をロックしている場合でも、センサーが使用されます。ただし、デバイスの設定によっては、上下を逆には回転できない場合があります。API レベル 9 で追加されました。
"userLandscape" 横向き。ただし、デバイス センサーやユーザーの設定に基づいて、通常の横向きか逆の横向きになります。API レベル 18 で追加されました。
"userPortrait" 縦向き。ただし、デバイス センサーやユーザーの設定に基づいて、通常の縦向きか逆の縦向きになります。ただし、デバイスの設定によっては、上下を逆には回転できない場合があります。API レベル 18 で追加されました。
"sensor" 画面の向きは、デバイスの方向センサーが判断します。ディスプレイの向きは、ユーザーがデバイスをどのように保持しているかによって異なります。ユーザーがデバイスを回転させると変わります。ただし、どのデバイスもデフォルトで 4 つある画面方向すべてに回転するわけではありません。4 方向すべてを使用するには、"fullSensor" を使います。ユーザーがセンサーベースの回転をロックしている場合でも、センサーは使用されます。
"fullSensor" デバイス方向センサーにより、4 つある画面方向のいずれにするかが決まります。これは "sensor" と似ていますが、デバイスの通常のサポート内容に関係なく、4 つの可能な画面方向のいずれかを許可するという点で異なります。たとえば、一部のデバイスは逆の縦向きや逆の横向きを通常は使用しませんが、これで有効になります。API レベル 9 で追加されました。
"nosensor" 画面の向きは、物理方向センサーを参照せずに決まります。センサーは無視されるため、ユーザーによるデバイスの動かし方によってディスプレイが回転することはありません。
"user" ユーザーが現在設定している画面の向き。
"fullUser" ユーザーがセンサーベースの回転をロックしている場合は、user と同じ動作になります。それ以外の場合は fullSensor と同じ動作になり、4 つある画面方向のいずれかが許可されます。 API レベル 18 で追加されました。
"locked" 画面の向きを現在の向き(任意)にロックします。API レベル 18 で追加されました。

注: 横向きまたは縦向きの値のいずれかを宣言すると、アクティビティを実行する画面方向きについて厳格な要件を定めていると見なされます。宣言した値により Google Play などのサービスでのフィルタリングが有効になるため、アクティビティに必要な画面方向をサポートするデバイスでしかアプリを利用できなくなります。たとえば、"landscape""reverseLandscape""sensorLandscape" のいずれかを宣言した場合、横向きをサポートするデバイスでしかアプリを利用できなくなります。

また、<uses-feature> 要素(<uses-feature android:name="android.hardware.screen.portrait"/> など)を使用して、アプリが縦向きまたは横向きを必要とすることを明示的に宣言します。これは Google Play とそれをサポートする他のサービスが提供するフィルタリング動作であり、デバイスが特定の画面方向しかサポートしていない場合にアプリをインストールできるかどうかを、プラットフォーム自体が制御するわけではありません。

android:showForAllUsers

デバイスの現ユーザーとアクティビティを起動したユーザーとが異なる場合、アクティビティを表示するかどうか。この属性は、リテラル値("true" または "false")に設定することも、ブール値を含むリソースまたはテーマ属性に設定することもできます。

この属性は API レベル 23 で追加されました。

android:stateNotNeeded
状態を保存せずにアクティビティを終了して、正常に再起動できるかどうか。以前の状態を参照せずに再起動できる場合は "true"、以前の状態が必要な場合は "false" です。デフォルト値は "false" です。

通常、リソースを節約するためにアクティビティを一時的にシャットダウンする前に、onSaveInstanceState() メソッドが呼び出されます。このメソッドは、アクティビティの現在の状態を Bundle オブジェクトに格納します。その後、アクティビティが再起動したときに onCreate() に渡されます。この属性を "true" に設定した場合、onSaveInstanceState() が呼び出されず、onCreate()Bundle ではなく null に渡されます。これはアクティビティが初めて起動したときと同じです。

"true" 設定は、状態を保持せずにアクティビティを再起動できることを意味します。たとえば、ホーム画面を表示するアクティビティは、なんらかの理由でクラッシュしても削除されないようにするために、この設定を使用します。

android:supportsPictureInPicture

アクティビティがピクチャー イン ピクチャー表示をサポートするかどうかを指定します。

android:taskAffinity
アクティビティがアフィニティを持つタスク。同じアフィニティを持つアクティビティは、概念的には同じタスクに属します(ユーザーの視点からは同じ「アプリ」です)。タスクのアフィニティは、ルート アクティビティのアフィニティによって決まります。

アフィニティは、次の 2 つのことを決定します。アクティビティの親を変更するタスク(allowTaskReparenting 属性を参照)と、FLAG_ACTIVITY_NEW_TASK フラグで起動したときにアクティビティを格納するタスクです。

デフォルトでは、アプリのアクティビティはすべて同じアフィニティを持ちます。この属性を設定することで、別々にグループ化したり、異なるアプリで定義されたアクティビティを同じタスク内に配置したりできます。どのタスクについてもアクティビティがアフィニティを持たないことを指定するには、これを空の文字列に設定します。

この属性を設定しなかった場合、アクティビティはアプリ用に設定されているアフィニティを継承します。<application> 要素の taskAffinity 属性をご覧ください。アプリのデフォルト アフィニティの名前は、build.gradle ファイルで設定されている名前空間です。

android:theme
アクティビティの全体的なテーマを定義するスタイル リソースへの参照を指定します。これにより、アクティビティのコンテキストがこの theme を使用するように自動的に設定されます。また、アクティビティの実際の外観によく合うように、アクティビティの起動前に「起動」アニメーションを表示することもあります。

この属性を設定しなかった場合、アクティビティはアプリ用に設定されたテーマ全体を <application> 要素の theme 属性から継承します。その属性も設定しなかった場合は、デフォルトのシステムテーマが使用されます。詳細については、スタイルとテーマをご覧ください。

android:uiOptions
アクティビティの UI 用の追加オプション。次のいずれかの値を指定する必要があります。

説明
"none"追加 UI オプションなし。これがデフォルトです。
"splitActionBarWhenNarrow"水平方向のスペースに制約がある場合(スマートフォンが縦向きモードの場合など)、画面下部にアプリバー(別名「アクションバー」)を追加して、そのバーにアクション アイテムを表示します。画面上部のアプリバーに少数のアクション アイテムを表示するのではなく、アプリバーを分割して、上部のバーにナビゲーション セクションを表示し、下部のバーにアクション アイテムを表示します。これにより、アクション アイテムだけでなく、上部のナビゲーション要素やタイトル要素にも、適切なスペースが与えられることになります。メニュー項目は 2 つのバーに分割されません。常に一緒に表示されます。

アプリバーの詳細については、アプリバーを追加するをご覧ください。

この属性は API レベル 14 で追加されました。

android:windowSoftInputMode
アクティビティのメイン ウィンドウと、画面上のソフト キーボードを含むウィンドウのインタラクションを指定します。この属性の設定は、次の 2 つに影響します。
  • アクティビティにユーザーの注意が向いたとき、ソフト キーボードは非表示か表示か。
  • ソフト キーボードのスペースに合わせてアクティビティのメイン ウィンドウのサイズを縮小するか、または、ウィンドウの一部がソフト キーボードで覆われたときに現在のフォーカスを表示するためにコンテンツをパンするかどうか。

この設定は、次の表に示す値のいずれか、または 1 つの "state..." 値と 1 つの "adjust..." 値の組み合わせにする必要があります。いずれかのグループに複数の値(複数の "state..." 値など)を設定すると、未定義の結果になります。次の例に示すように、個々の値は縦棒(|)で区切ります。

<activity android:windowSoftInputMode="stateVisible|adjustResize" ... >

ここで設定した値("stateUnspecified""adjustUnspecified" を除く)は、テーマで設定した値をオーバーライドします。

説明
"stateUnspecified" ソフト キーボードが非表示か表示かが、指定されていません。システムは適切な状態を選択するか、テーマの設定を利用します。

これがソフト キーボードの動作のデフォルト設定です。

"stateUnchanged" ソフト キーボードは、アクティビティが前面に出たとき、表示か非表示かにかかわらず、最後の状態を維持します。
"stateHidden" ソフト キーボードは、ユーザーがアクティビティを選択したとき(つまり、ユーザーが別のアクティビティを離れて戻るときではなく、積極的にアクティビティに移動したとき)、非表示になります。
"stateAlwaysHidden" アクティビティのメイン ウィンドウに入力フォーカスがある場合、ソフト キーボードは常に非表示になります。
"stateVisible" ソフト キーボードは、ユーザーがアクティビティを選択したとき(つまり、ユーザーが別のアクティビティを離れて戻るときではなく、積極的にアクティビティに移動したとき)、表示されます。
"stateAlwaysVisible" ウィンドウが入力フォーカスを受け取ると、ソフト キーボードが表示されます。
"adjustUnspecified" ソフト キーボード用のスペースを確保するためにアクティビティのメイン ウィンドウをサイズ変更するかどうか、または現在のフォーカスを画面に表示するためにウィンドウのコンテンツをパンするかどうか。ウィンドウのコンテンツをスクロールできるレイアウト ビューがあるかどうかに応じて、これらのモードのいずれかをシステムが自動的に選択します。そのようなビューがある場合、スクロールによってウィンドウのすべてのコンテンツが小さな領域内に表示されると仮定して、ウィンドウのサイズが変更されます。

これがメイン ウィンドウの動作のデフォルト設定です。

"adjustResize" アクティビティのメイン ウィンドウは常にサイズ変更され、画面上にソフト キーボード用のスペースが確保されます。
"adjustPan" アクティビティのメイン ウィンドウは、ソフト キーボード用のスペースを確保するためにサイズ変更されることはありません。ウィンドウのコンテンツは自動的にパンされるため、キーボードで現在のフォーカスが隠されることはなく、ユーザーは入力している内容を常に確認できます。ユーザーはソフト キーボードを閉じ、ウィンドウ上の隠れた部分にアクセスして操作する必要があるため、これは通常、サイズ変更ほど望ましいことではありません。

この属性は API レベル 3 で導入されました。

導入時の API レベル:
API レベル 3 で追加された noHistorywindowSoftInputMode を除くすべての属性で API レベル 1。
関連項目:
<application>
<activity-alias>