Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@e-takazawa

マルチウィンドウが有効/警告/無効になるAndroidアプリの条件を調べてみた。

More than 3 years have passed since last update.

ディップ Advent Calendarの6日目です。

本当はAndroid NからJava 8のラムダ式記法が使えるようになったので、勉強したことを投稿しようとしたが、minSdkVersionを24(つまりAndroid N)にしないと使えないことがわかり(冷静に考えれば気づく話だが)、しばらく未来の技術だなぁと意気消沈してしまったので、以前から気になっていたAndroid Nから導入されたマルチウィンドウ機能について、調べたことを投稿しようと思います。

マルチウィンドウとは

マルチ ウィンドウのサポート

Android Nから複数のアプリを同時に表示するためのマルチウィンドウサポートが追加されています。
Overview キーを長押しすることでマルチウィンドウモードに切り替えたりすることが可能です。

ただ、Android Nから搭載された機能なので、対応していないアプリではマルチウィンドウに対応していないアプリでは動かなかったり、マルチウィンドウが動いても【アプリは分割画面では動作しないことがあります。】というtoastが出てしまう場合があります。

前からどういう条件下でそうなるのかが興味があったので、調査してみました。

マルチウィンドウモードが無効になる条件

色々調べた結果、targetSdkVersionが23以下で、以下のパラメータのいずれかの指定があるとマルチウィンドウモードは無効になります。

  • android:screenOrientationをportrait、landscape、lockedにしている場合
  • android:immersive="true"にしている場合

だいたい、screenOrientation=portraitにして縦固定画面にしている場合が多いと思いますが、その場合【アプリは分割画面をサポートしていません。】というtoastが出てマルチウィンドウが動作しません。
なんでだろうと思いますが、マルチウィンドウを起動するとフォーカスをチェンジするたびにonResume、onParseが走るので、縦画面に固定して最適化しているようなアプリではマルチウィンドウではうまく動かないという判断が出されたのだと思います。

マルチウィンドウ実行時に【アプリは分割画面では動作しないことがあります。】警告メッセージが出る条件

targetSdkVersionが23以下でscreenOrientationやimmersiveの指定がない場合は基本的にマルチウィンドウモードは有効になるようです。
ただ、targetSdkVersionは23以下なので、【アプリは分割画面では動作しないことがあります。】の警告文を出して、「動くと思うけど、動作は保証しないよ」という意思表示をしているようです。

マルチウィンドウが有効になる条件

当たり前といえば当たり前ですが、基本的にtargetSdkVersionが24以降ならば、マルチウィンドウは有効になります。
screenOrientationやimmersiveが設定されていても問題なく動作します。
targetSdkVersionが24ならば、マルチウィンドウ対応は当たり前だよね。と言われている気がしますね。。

マルチウィンドウを有効にしたくない場合は

targetSdkVersionが24にするならばマルチウィンドウ対応をすべきだと思いますが、やりたくない場合もあると思います。
その場合、AndroidManifest.xmlの<activity> ノードまたは <application> ノードにandroid:resizeableActivity="false"を設定すればマルチウィンドウモードは無効化されます。

ただ、このandroid:resizeableActivity、targetSdkVersionが24で追加された属性なので、targetSdkVersionが23以下では使えません。
かといってマルチウィンドウモードを無効化するためにscreenOrientationやimmersiveをわざわざ付けるのも色々まずい場合もあると思います。

結論ですが、screenOrientationもimmersiveも利用していない場合は、マルチウィンドウモードに対応するか、targetSdkVersionを24に上げてandroid:resizeableActivityでマルチウィンドウモードを無効化するのが早いと思います。

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
e-takazawa
WEBサイト開発チームでマネジメントを担当しています。(WEBサイト自体はLaravelです。) Java、CakePHP、Androidの開発を経験して、iOS/Android開発チームのマネージャーになった後、現在のポジションにいます。
dip-net
ディップ株式会社は「バイトル」「はたらこねっと」などの求人情報サービスをはじめ、人工知能専門メディア「AINOW」、スタートアップ専門メディア「スタートアップタイムズ」、アニメなどの舞台を紹介するサイト「聖地巡礼マップ」といった新しい分野のサービスを自社で開発・運営しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?