WindowManager

アプリ デベロッパーは Jetpack WindowManager ライブラリを使用して、新しいデバイスのフォーム ファクタとマルチウィンドウ環境をサポートできます。このライブラリは、API バージョン 14 以降のための共通 API サーフェスを提供します。最初のリリースでは折りたたみ式デバイスをターゲットにしていますが、今後のバージョンではより多くのディスプレイ タイプとウィンドウ機能に対応する予定です。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2023 年 2 月 22 日 1.0.0 - - 1.1.0-alpha06

依存関係の宣言

Window Manager への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

Groovy

dependencies {
    implementation "androidx.window:window:1.0.0"

    // For Java-friendly APIs to register and unregister callbacks
    implementation "androidx.window:window-java:1.0.0"

    // For RxJava2 integration
    implementation "androidx.window:window-rxjava2:1.0.0"

    // For RxJava3 integration
    implementation "androidx.window:window-rxjava3:1.0.0"

    // For testing
    implementation "androidx.window:window-testing:1.0.0"
}

Kotlin

dependencies {
    implementation("androidx.window:window:1.0.0")

    // For Java-friendly APIs to register and unregister callbacks
    implementation("androidx.window:window-java:1.0.0")

    // For RxJava2 integration
    implementation("androidx.window:window-rxjava2:1.0.0")

    // For RxJava3 integration
    implementation("androidx.window:window-rxjava3:1.0.0")

    // For testing
    implementation("androidx.window:window-testing:1.0.0")
}

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 1.1

バージョン 1.1.0-alpha06

2023 年 2 月 22 日

androidx.window:window-*:1.1.0-alpha06 がリリースされました。バージョン 1.1.0-alpha06 に含まれる commit については、こちらをご覧ください

新機能

  • UI コンテキストから WindowLayoutInfo を取得する試験運用版を公開しました。

API の変更

  • アクティビティの埋め込みが利用可能かどうかを示す splitSupportStatus を追加しました。(I10024
  • UI Context WindowLayoutInfo API を試験運用版にしました。(I58ee0
  • RearDisplay モードを有効にするための WindowAreaController と API を導入しました。このモードは、現在のウィンドウを背面カメラに合わせたディスプレイに移動する際に使用します。(Iffcbf
  • デフォルトの背景色を更新しました。(I1ac1b
  • SplitAttributes パラメータを追加しました。(I18bdd
  • SplitRuleSplitAttributesSplitAttributesCalculator の API を追加しました。(I92d23
  • maxAspectRatio に関する API を改善しました。
    1. alwaysAllow()alwaysDisallow()ALWAYS_ALLOWALWAYS_DISALLOW に置き換えました。
    2. @see の API ドキュメントを独立したドキュメントとして更新しました。(I3057b
  • 以下のコンストラクタは、アプリによって呼び出されるものではないため、公開 API から削除されました。
    • SplitInfo コンストラクタ
    • ActivityStack コンストラクタ(Ide534
  • SplitRulemaxAspectRatioInPortrait/Landscape を受け取るようになりました。親境界のアスペクト比がリクエストされた maxAspectRatio 以下の場合にのみ、アクティビティを分割できます。(Ia5990
  • RuleController#parseRules を静的に変更しました。(I785df
  • ActivityEmbedding に関する API を改善しました。
    1. API 命名規則の調整 - 次のインスタンスについては add / remove を使用します
    2. registerRuleaddRule に変更
    3. unregisterRuleremoveRule に変更
    4. ActivityRule は分割ルールではないため、getSplitRulesgetRules に置き換えました
    5. 多数のルールを設定できる RuleController#setRules を追加しました
    6. SplitController のルール関連の API がシングルトン RuleController に抽出されます。該当する API は次のとおりです。
    7. addRule
    8. removeRule
    9. getRules
    10. setRules
    11. clearRules
    12. parseRules
    13. SplitController#isActivityEmbedded がシングルトン ActivityEmbeddingController に抽出されます。該当する API は次のとおりです。
    14. isActivityEmbedded
    15. SplitController#initialize を削除しました。XML ファイルからルールを設定するには、RuleController#parseRules#setRules を使用してください。変更前: SplitController.initialize(context, R.xml.static_rules) 変更後: val ruleController = RuleController.getInstance(context) val rules = ruleController.parseRules(R.xml.static_rules) ruleController.setRules(rules)
    16. 静的ルールとランタイム ルールが区別されなくなりました。つまり、#clearRules を呼び出すと、静的 XML ルールの定義に登録されているか実行時かどうかにかかわらず、すべてのルールがクリアされます。SplitController#clearRegisteredRules の従来の動作を利用するには、XML リソース ID を指定して RuleController#parseRules を呼び出し、RuleController#setRules を呼び出してルールを再度設定してください。 変更前: SplitController.getInstance(context).clearRegisteredRules() 変更後: val ruleController = RuleController.getInstance(context) val rules = ruleController.parseRules(R.xml.static_rules) ruleController.setRules(rules)Ib3967
  • SplitRule API を改善しました。
    1. 最小サイズは、SplitRule のピクセルではなく DP で指定します。
    2. 最小サイズをオプションとして受け取るように SplitRule Builder をリファクタリングしました。(I95f17
  • SplitController を初期化するためにコンテキストを渡すようにしました。(I42549
  • SplitRule#layoutDir の名前を #layoutDirection に、SplitRule Builder#setLayoutDir の名前を Builder#setLayoutDirection に変更しました。(I3f6d1

バージョン 1.1.0-alpha04

2022 年 11 月 9 日

androidx.window:window-*:1.1.0-alpha04 がリリースされました。バージョン 1.1.0-alpha04 に含まれる commit については、こちらをご覧ください

新機能

  • ActivityEmbeddingActivityStack が空かどうかを判断するためのメソッドを公開しました。
  • ActivityEmbedding API から試験運用版 API タグを削除しました。
  • 構築には Builder がおすすめの方法であるため、ActivityRule コンストラクタを非表示にしました。
  • WindowMetricsWindowInsets を取得する試験運用版のメソッドを追加しました。
  • プレースホルダが終了しないように SplitPlaceholderFinishBehavior を更新しました。プレースホルダが終了すると、混乱を招く動作が発生していました。

API の変更

  • val isEmpty を一般公開しました。これは fun isEmpty を置き換わるものです。
  • ActivityStack パラメータのアクティビティの名前を activitiesInProcess に変更しました。(Ia5055
  • ActivityFilter#matchesClassNameActivityFilter#matchesClassNameOrWildCard は混乱を招くため、削除しました。
  • 呼び出し元がさまざまなフィルタを区別できるように、ActivityFilter#componentNameActivityFilter#intentAction を追加しました。(I41f22
  • 試験運用版 API から @Deprecated API を削除しました。(I216b3
  • アクティビティ埋め込み API の @ExperimentalWindowApi を削除しました。(I69ebe
  • ActivityRule コンストラクタを非表示にしました。代わりに Builder を使用してください。(If4eb6
  • アクティビティが ActivityFilter に含まれているかどうかを確認する API を追加しました。(Ia43cf
  • WindowMetrics クラスと WindowMetricsCalculatorCompat クラスの変更を反映するように API ファイルを更新しました。(I667fe
  • ActivityEmbedding プロパティの Javadoc とクラス名を更新しました。(Ia1386
  • AndroidManifest.xml で使用する ActivityEmbedding プロパティ タグ名を追加しました。(Id1ad4
  • 新しい API SplitPlaceholderFinishBehaviorSplitPlaceholderRule.finishPrimaryWithPlaceholder を追加しました。これは、プレースホルダのアクティビティが終了するタイミング、およびアクティビティの埋め込みにおける関連するアクティビティの動作を定義する既存の SplitPlaceholderRule.finishPrimaryWithSecondary に代わるものです。(I64647

バグの修正

  • RearDisplay モードを有効にするための WindowAreaController と API を導入しました。このモードは、現在のウィンドウを背面カメラに合わせたディスプレイに移動する際に使用します。(I388ab

バージョン 1.1.0-alpha03

2022 年 7 月 27 日

androidx.window:window-*:1.1.0-alpha03 がリリースされました。バージョン 1.1.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • 埋め込みルールのデフォルト値を更新しました。

API の変更

  • 埋め込みルール プロパティのデフォルト値を更新しました。(Ic4d35

バージョン 1.1.0-alpha02

2022 年 5 月 11 日

androidx.window:window-*:1.1.0-alpha02 がリリースされました。バージョン 1.1.0-alpha02 に含まれる commit については、こちらをご覧ください

新機能

  • Java と RxJava をサポートするためのアダプタ ライブラリをリリースします。

バージョン 1.1.0-alpha01

2022 年 5 月 11 日

androidx.window:window-*:1.1.0-alpha01 がリリースされました。バージョン 1.1.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • Java と RxJava をサポートするためのアダプタをリリースします。

バージョン 1.1.0-alpha01

2022 年 4 月 20 日

androidx.window:window:1.1.0-alpha01 がリリースされました。バージョン 1.1.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • アプリがバックグラウンド処理に移行すると折りたたみ機能の出力が停止するバグを修正しました。
  • 試験運用版の ActivityEmbedding API を拡張しました。

API の変更

  • アクティビティが埋め込まれているかどうかを確認する公開 API。(I39eb7

バグの修正

  • アクティビティ分割でコンテナの終了動作をカスタマイズする API を追加しました。(I1a1e4
  • アクティビティ分割ルールの新しい設定オプションを追加しました。(Iec6af

バージョン 1.0

バージョン 1.0.0

2022 年 1 月 26 日

androidx.window:window-*:1.0.0 がリリースされました。バージョン 1.0.0 に含まれる commit については、こちらをご覧ください

1.0.0 の主な機能

  • WindowInfoTrackerFoldingFeature により折りたたみ式スマートフォンをサポートします。WindowMetricsCalculator は現在の WindowMetrics の計算に役立ちます。

バージョン 1.0.0-rc01

2021 年 12 月 15 日

androidx.window:window-*:1.0.0-rc01 がリリースされました。バージョン 1.0.0-rc01 に含まれる commit については、こちらをご覧ください

新機能

  • WindowInfoTracker による折りたたみ式スマートフォンのサポートを追加しました。
  • WindowMetrics の現在値と最大値を計算するメソッドを追加しました。
  • サポート用のテスト API を追加しました。

バージョン 1.0.0-beta04

2021 年 11 月 17 日

androidx.window:window-*:1.0.0-beta04 がリリースされました。バージョン 1.0.0-beta04 に含まれる commit については、こちらをご覧ください

新機能

  • WindowInfoRepository の名前を WindowInfoTracker に変更しました。
  • Activity を WindowInfoTracker の明示的なメソッド依存関係にします。
  • Robolectric を使用するデベロッパーをサポートするために、WindowMetricsCalculator に簡単な TestRule を追加しました。

API の変更

  • 拡張機能の抽出(I25a5f
  • ActivityStack に isEmpty を追加しました(I5a4e6
  • WindowInfoRepository の名前を WindowInfoTracker に変更しました。
    • java/rxjava/testing の依存関係を一致するように更新しました。(I0da63
  • 単純な WindowMetricsCalculator のテストルールを追加しました。(Ibacdb

バージョン 1.0.0-beta03

2021 年 10 月 27 日

androidx.window:window-*:1.0.0-beta03 がリリースされました。バージョン 1.0.0-beta03 に含まれる commit については、こちらをご覧ください

新機能

  • 試験運用版のアクティビティ埋め込み API を追加しました。この最初のレイアウト バージョンでは、2 つのアクティビティを並べて表示できます。

API の変更

  • currentWindowMetrics API は、正確に提供できないため削除しました。代わりに WindowMetricsCalculator を使用してください。(Icda5f
  • 拡張機能 API を更新しました。(Ica92b
  • アクティビティを埋め込んで親タスク ウィンドウ内に並べて表示できる新機能のインターフェースを追加しました。(I5711d
  • WindowMetrics と WindowLayoutInfo のコンストラクタを非表示にしました。代わりにテスト API を使用してください。(I5a1b5
  • 偽の WindowLayoutInfo オブジェクトを作成する API を追加しました。(I4a2fd

バグの修正

バージョン 1.0.0-beta02

2021 年 9 月 1 日

androidx.window:window-*:1.0.0-beta02 がリリースされました。バージョン 1.0.0-beta02 に含まれる commit については、こちらをご覧ください

新機能

  • 試験運用版 API にアノテーションを付けるために、試験運用版アノテーションを追加します。(I9f1b6
  • Rect を受け入れるテスト用 FoldingFeature を作成するテストメソッドを追加します。これにより、実際の Activity ではなく Robolectric を使用する場合のテストが容易になります。(Id1cca

バージョン 1.0.0-beta01

2021 年 8 月 18 日

androidx.window:window-*:1.0.0-beta01 がリリースされました。バージョン 1.0.0-beta01 に含まれる commit については、こちらをご覧ください

新機能

  • 古い定数を削除し、FoldingFeature をインターフェースに変更しました。

API の変更

  • 古い定数を削除し、FoldFeature をインターフェースに変更します。(I9a2d5

バグの修正

  • Test Core ライブラリに依存するライブラリがバージョン 1.4.0 にアップグレードされました。Android プラットフォーム バージョン S で動作するようになります。(I88b72b/189353863

バージョン 1.0.0-alpha10

2021 年 8 月 4 日

androidx.window:window-*:1.0.0-alpha10 がリリースされました。バージョン 1.0.0-alpha10 に含まれる commit については、こちらをご覧ください。

新機能

  • WindowInfoRepo の名前を WindowInfoRepository に変更し、対応するクラス / ファイルを調整します。
  • 時間の経過とともに値が変化するため、現在のウィンドウ指標を WindowInfoRepository の Flow に変換します。
  • WindowInfoRepoJavaAdapter の名前を WindowInfoRepoCallbackAdapter に変更します。
  • テスト用の FoldingFeature オブジェクトを作成するヘルパー メソッドを追加します。
  • パッケージを更新し、クラスがサポートする機能に基づいてクラスをグループ化します。

API の変更

  • ActivityExt の名前を ActivityExtensions に変更し、Repo を Repository に変更します。(I61a16
  • クラスのパッケージを更新します。(I23ae2
  • WindowInfoRepo から WindowMetrics を削除します。(I24663
  • WindowManager を削除し、WindowInfoRepo を使用します。
    • WindowBackend を内部化します。(I06d9a
  • ウィンドウ指標を Flow に変換します。
    • Java アダプタの名前を WindowInfoRepoCallbackAdapter に変更します。
    • callbackFlow を削除します。したがって、今後は試験運用版 API を使用しません。(Ia4d15
  • テスト表示機能を作成するヘルパー メソッドを追加します。
    • occlusionMode を occlusionType に変更します。(If4cff

バグの修正

  • core ライブラリが削除される ProGuard エラーを修正しました。
  • WindowLayoutInfo が追加のサブスクライバーに配信されないエラーを修正しました。
  • 構成を変更しても折りたたみ機能の更新がトリガーされないエラーを修正しました。

バージョン 1.0.0-alpha09

2021 年 6 月 30 日

androidx.window:window-*:1.0.0-alpha09 がリリースされました。バージョン 1.0.0-alpha09 に含まれる commit については、こちらをご覧ください。

新機能

  • 整数の定数を制限なしの列挙型に変更します。
  • テスト用の折りたたみ機能を作成するためのテスト ユーティリティを追加します。

API の変更

  • テスト表示機能を作成するヘルパー メソッドを追加します。(I3cf54
    • occlusionModeocclusionType に変更します。

バグの修正

  • データ ストリームの複数のコンシューマを追加する際に、初期値を出力します。

バージョン 1.0.0-alpha08

2021 年 6 月 16 日

androidx.window:window-*:1.0.0-alpha08 がリリースされました。バージョン 1.0.0-alpha08 に含まれる commit については、こちらをご覧ください。

新機能

  • WindowInfoRepository を使用する場合のテストを容易にするため、テスト アーティファクトをリリースしました。WindowInfoRepository を使用して、DisplayFeatures と WindowMetrics に関する情報を取得できます。(I57f66Ida620

バージョン 1.0.0-alpha07

2021 年 6 月 2 日

androidx.window:window-*:1.0.0-alpha07 がリリースされました。バージョン 1.0.0-alpha07 に含まれる commit については、こちらをご覧ください。

新機能

  • ウィンドウ ライブラリのコアを Kotlin に移行します。今後は、コルーチンと suspend 関数を使用して非同期データを公開します。
  • WindowLayoutInfo のストリームと WindowMetrics を取得するための主要な接点として WindowInfoRepo を追加します。
  • コールバックの登録と登録解除を行う Java 対応 API を公開する window-java アーティファクトを導入しました。
  • RxJava に対応させた API を公開するアーティファクト window-rxjava2window-rxjava3 を導入しました。

API の変更

  • 依存関係を全体に提供する WindowServices を追加しました。
    • ウィンドウ レイアウト情報を消費するコルーチン ベースの API を追加しました。(Iab70f
  • ウィンドウ マネージャー ライブラリのコアを Kotlin に移行しました。(Icca34

バグの修正

  • 形状の境界を表すデータクラスを追加しました。(I6dcd1

バージョン 1.0.0-alpha06

2021 年 5 月 5 日

androidx.window:window:1.0.0-alpha06 がリリースされました。バージョン 1.0.0-alpha06 に含まれる commit については、こちらをご覧ください。

新機能

  • Google は Kotlin への移行を開始しており、次のリリースで完了する予定です。
  • DeviceState が公開 API から削除されました。代わりに FoldingFeature を使用してください。
  • 現時点で STATE_FLIPPED はいかなるユースケースでもサポートされていないため、FoldingFeature の状態から削除しました。
  • サポートが終了した他の API も削除しました。

API の変更

  • Kotlin を依存関係として追加しました。
    • コアライブラリを Kotlin に移行しました。(Idd995
  • DisplayFeature ビルダーを削除しました。(I61fa4
  • 公開 API から DeviceState を削除しました。代わりに FoldingFeature を使用してください。(Id6079
  • 拡張機能からデバイス状態のコールバックを削除しました。(I5ea83
  • FoldingFeature から STATE_FLIPPED を削除しました。(I9c4e1
  • 非推奨となった登録メソッドを削除しました。(Ib381b

バージョン 1.0.0-alpha05

2021 年 3 月 24 日

androidx.window:window:1.0.0-alpha05 がリリースされました。バージョン 1.0.0-alpha05 に含まれる commit については、こちらをご覧ください

新機能

FoldingFeature に便利なメソッドを追加し、機能が分離しているかどうか、覆い隠しているかどうか、ヒンジの向きをアプリが判断できるようにしました。また、以下のために、ヒンジタイプを非表示にします。

WindowManager から同期読み取りメソッドを削除します。同期読み取りメソッドは、暗黙的な競合状態が生じるため、エラーが発生しやすくなります。WindowLayoutInfo のアップデートを受け取るため、リスナーとコールバックを登録します。

API の変更

  • FoldingFeatures の操作に役立つメソッドを追加(Ie733f
  • WindowManager から同期読み取りメソッドを削除(I96fd4

バージョン 1.0.0-alpha04

2021 年 3 月 10 日

androidx.window:window:1.0.0-alpha04 がリリースされました。バージョン 1.0.0-alpha04 に含まれる commit については、こちらをご覧ください

新機能

  • OEM が実装されていない場合、WindowLayoutInfo が出力されないバグを修正しました。ここでは空の WIndowLayoutInfo を出力するようにします。
  • アプリがバックグラウンドで動作しているときにヒンジ状態が変わると、状態が正しく更新されないバグを修正しました。この状態は統一されるようになります。
  • ランタイム依存関係からの警告を無視するように、ProGuard ファイルを更新しました。

バグの修正

  • OEM ライブラリがない場合は、空の値を出力します。(Ide935

バージョン 1.0.0-alpha03

2021 年 2 月 18 日

androidx.window:window:1.0.0-alpha03 がリリースされました。バージョン 1.0.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • OEM の実装が空の場合は、WindowLayoutInfo に空の値を出力します。これにより、より多くのデバイスでライブラリを簡単に使用できるようになります。ただし、API は非同期であるため、アプリで防御のためのコードを作成してタイムアウト後にデフォルト値を出力することをおすすめします。OEM の実装について Google はいかなる保証もいたしません。また、初期値が遅延する可能性もあります。

バグの修正

  • OEM ライブラリがない場合は、空の値を出力します。(Ide935

バージョン 1.0.0-alpha02

2021 年 1 月 27 日

androidx.window:window:1.0.0-alpha02 がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください。

新機能

  • API を合理化して誤りを減らすために、いくつかの API のサポートを終了しました。重要な変更の 1 つは、WindowManager から同期読み取りオペレーションを削除して DeviceState のサポートを終了したことです。同期読み取りオペレーションは競合状態を引き起こし、正しく UI が表示されない原因になることがあります。

  • DisplayFeature は、他の機能で今後実装されるインターフェースに移行されました。最初に提供される機能は FoldingFeature で、これは画面の折りたたみまたはヒンジを表現します。これには、DeviceState に取って代わるヒンジの状態も含まれます。

  • WindowMetrics は Android 11 で導入されましたが、その目的は、デベロッパーがウィンドウに関する指標(ウィンドウの画面上の位置とサイズ、システム インセットなど)を簡単にクエリできるようにすることでした。このリリースでは、デベロッパーが WindowMetrics を利用して古い Android バージョンのサポートを継続できるように、API をバックポートしました。WindowMetrics は、WindowManager#getCurrentWindowMetrics() API および WindowManager#getMaximumWindowMetrics() API で取得できます。

API の変更

  • 次のアルファ版で削除される API のサポートを終了しました(Ib7cc4
  • ExtensionInterface を更新して明示的なアクティビティ参照を受け入れるようにしました。(I07ded
  • WindowMetrics API を導入しました。(I3ccee
  • WindowManager から同期読み取りメソッドを削除しました(I69983
  • ExtensionWindowBackend パッケージが保護されるようにしました。(Ied208

バグの修正

  • 視覚的コンテキストを受け入れるように ExtensionInterface API を更新しました。(I8e827

外部からの協力

  • DeviceState と WindowLayoutInfo を結合して、データに簡単にアクセスできるようにしました。(Id34f4

バージョン 1.0.0-alpha01

2020 年 2 月 27 日

androidx.window:window:1.0.0-alpha01androidx.window:window-extensions:1.0.0-alpha01 がリリースされました。バージョン 1.0.0-alpha01 に含まれる commit については、こちらをご覧ください。 これは、Window Manager ライブラリの最初のリリースです。

新機能

  • DisplayFeature: この新しい API は、連続する平坦な画面サーフェスが蝶番や折りたたみの部分で途切れた状態を識別します。
  • DeviceState: この新しい API は、スマートフォンの定義済みの物理状態(CLOSEDOPENEDHALF_OPENED など)のリストの中から現在の物理状態を提供します。