Galaxy S3 α や Galaxy Note2 で使える Multi Window 対応 Android アプリの作り方
Galaxy S3 α や Galaxy Note 2 には Multi Window という機能が利用あり、画面を分割して Android アプリを同時に利用することが出来ます。
このように、上では Chrome でブログを閲覧し、下では Twitter アプリを利用するといったことが出来ます。
この Multi Window 機能は対応アプリしか利用することが出来ませんが、 AndroidManifest.xml と dimens.xml を編集するだけでお手軽に対応できるようです。
Multi Window 対応アプリの作り方
まず、このような AndroidManifest.xml があるとします。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-sdk android:minSdkVersion="4" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>
Application タグ内に Multi Window 機能が使えるように宣言をします。
<application ... > <uses-library android:required="false" android:name="com.sec.android.app.multiwindow" /> <meta-data android:name="com.sec.android.support.multiwindow" android:value="true" /> <meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_W" android:resource="@dimen/app_defaultsize_w" /> <meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_H" android:resource="@dimen/app_defaultsize_h" /> <meta-data android:name="com.sec.android.multiwindow.MINIMUM_SIZE_W" android:resource="@dimen/app_minimumsize_w" /> <meta-data android:name="com.sec.android.multiwindow.MINIMUM_SIZE_H" android:resource="@dimen/app_minimumsize_h" />
@dimen/app_defaultsize_w と言った値が定義されていませんので dimens.xml に以下を追加します。
<dimen name="app_defaultsize_w">640dip</dimen> <dimen name="app_defaultsize_h">400dip</dimen> <dimen name="app_minimumsize_w">400dip</dimen> <dimen name="app_minimumsize_h">200dip</dimen>
あとは、 Multi Window に対応させたい Activity に以下の intent-filter を追加します。
<activity ... > <intent-filter> <category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
たったこれだけで、あなたのアプリが Multi Window 対応になりました。空の Activity を表示させてみたのが以下です。
最後に、全てのコードを組み合せた AndroidManifest.xml を貼っておきます。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-sdk android:minSdkVersion="4" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" /> </intent-filter> </activity> <uses-library android:required="false" android:name="com.sec.android.app.multiwindow" /> <meta-data android:name="com.sec.android.support.multiwindow" android:value="true" /> <meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_W" android:resource="@dimen/app_defaultsize_w" /> <meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_H" android:resource="@dimen/app_defaultsize_h" /> <meta-data android:name="com.sec.android.multiwindow.MINIMUM_SIZE_W" android:resource="@dimen/app_minimumsize_w" /> <meta-data android:name="com.sec.android.multiwindow.MINIMUM_SIZE_H" android:resource="@dimen/app_minimumsize_h" /> </application> </manifest>
上記のコードを追加したのになぜか対応されないよ?
どうやら screenOrientation が定義されている Activity では、 Multi Window 機能は動かないようです。 頑張って画面回転に対応させましょう。