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 機能は動かないようです。 頑張って画面回転に対応させましょう。

参考 URL