5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Android】マルチウインドウ環境でのウインドウサイズの取得

Posted at

この記事について

Android N のマルチウインドウ環境で、ウインドウサイズを取得するとどのような値が返ってくるかについて説明します。

具体的には次の API の返す値を調査しました。

  • getActivity().getWindowManager().getDefaultDisplay().getSize(out);
    • 以下、Display.getSize() と記載します。
  • getActivity().getWindowManager().getDefaultDisplay().getRealSize(out);
    • 以下、Display.getRealSize() と記載します。

これらの API Reference は次の通りです。

結論

  • Display.getSize()
    • マルチウインドウ状況に応じたウインドウサイズが取得できる
    • 非マルチウインドウではステータスバーのサイズが含まれている一方、マルチウインドウ状況ではこれが含まれない
  • Display.getRealSize()
    • マルチウインドウ状況に影響をうけず端末のディスプレイサイズが取得できる

条件

環境

  • 機種:Nexus 6P
  • OS:Android 7.1.1
  • 端末のディスプレイサイズ:2560 x 1440

コード

それぞれの API の値を画面に表示するアプリを作りました。
https://github.com/hshiozawa/MultiWindowLifecycleTester

表示部分のコードは次の Java ファイル内にあります。
https://github.com/hshiozawa/MultiWindowLifecycleTester/blob/master/app/src/main/java/com/hjm/multiwindowtester/fragment/BaseFragment.java

補足
マルチウインドウ状況でのこれらの値を取得するためには、onMultiWindowModeChanged() で値を取得したほうがよさそうです。通常の Fragment のライフルサイクル上では、マルチウインドウの状況が正しく取得出来ないケースがあります。
ref: https://commonsware.com/blog/2016/06/07/isinmultiwindowmode-race-condition.html

結果

非マルチウインドウ環境

ポートレイト

非マルチウインドウのポートレイトでは各 API のサイズは次のようになりました。

  • getSize():w=1440, h=2392(赤枠)
  • getRealSize(), w=1440, h=2560(緑枠)

ランドスケープ

非マルチウインドウのランドスケープでは各 API のサイズは次のようになりました。

  • getSize():w=2392, h=1440(赤枠)
  • getRealSize(), w=2560, h=1440(緑枠)

マルチウインドウ環境

ポートレイト・ウインドウ上部

マルチウインドウのポートレイトで、上部にウインドウを表示した場合、各 API のサイズは次のようになりました。

  • getSize():w=1439, h=1134(赤枠)
  • getRealSize(), w=1440, h=2560(緑枠)

ポートレイト・ウインドウ下部

マルチウインドウのポートレイトで、下部にウインドウを表示した場合、各 API のサイズは次のようになりました。

  • getSize():w=1439, h=1134(赤枠)
  • getRealSize(), w=1440, h=2560(緑枠)

ランドスケープ・ウインドウ右側

マルチウインドウのランドスケープで、右側にウインドウを表示した場合、各 API のサイズは次のようになりました。

  • getSize():w=1176, h=1355(赤枠)
  • getRealSize(), w=2560, h=1440(緑枠)

ランドスケープ・ウインドウ左側

マルチウインドウのランドスケープで、左側にウインドウを表示した場合、各 API のサイズは次のようになりました。

  • getSize():w=1176, h=1355(赤枠)
  • getRealSize(), w=2560, h=1440(緑枠)
5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?