あたも技術ブログ

セットジャパンコーポレーションの社員が運営しています。

マルチウィンドウ

さてさて、先日「AndroidN」が正式リリースされました。
AndroidMからの大きな変更点としては

  • マルチウィンドウ
  • データセーバー
  • 通知

などでしょうか。

新機能・変更点などは色々なサイトがまとめてくれているので割愛します。
http://mobilelaby.com/blog-entry-android-n-new-feature.html
http://androidlover.net/android-os/android-m/android-m-surely-releases-2015.html

様々な変更がありますが、その中で今回はマルチウィンドウの対応方法について書いていきたいと思います。



マルチウィンドウとは

マルチウィンドウとは1画面上に複数のアプリを同時に表示すること

f:id:atamo_dev:20160920221356g:plain

では、AndroidNならどんなアプリでもマルチウィンドウにできるのか?
答えは×です。
簡単な手順ですが、対応しなければいけないことがあります。




アプリをマルチウィンドウに適用する

アプリでマルチウィンドウモードを可能にするためには、 <application>全体、または適用させたい個々の<activity>マニフェストファイルで、 新たな属性android:resizeableActivityをtrueに設定する必要があります。
(アプリのtargetSdkVersionがandroidNより以前の場合、属性はデフォルトでfalseになっています)


簡単ですね!!
マルチウィンドウに対応できたら、以下の属性でリサイズの設定をすることができます。

android:defaultWidth:デフォルトの幅を指定
android:defaultHeight:デフォルトの高さを指定
android:gravity:グラビティの初期値。アプリをどこで分割すればよいかを指定
android:minimumSize:最小サイズを指定

マニフェストを修正して、サイズを決めるだけで対応できる。
素晴らしいですね!








と思っていることでしょう。
実はこのマルチウィンドウ、一つ罠が仕掛けられています。
マルチウィンドウに対応しないのであれば、resizeableActivityをfalseにすれば、確かにマルチウィンドウにはならないです。

が、

startActivityForResultで別アプリから呼び出された場合は話は別です。
Activityのマルチウィンドウ設定をfalseにしていても、共有の場合は強制でマルチウィンドウモードになってしまいます。

【参考サイト】
Pro-tip 5: Activities started by other apps must always support multi-window
ということで、暗黙的インテントを作成する場合はマルチウィンドウに対応しておきましょう!