2012年5月1日火曜日

透明のActivityにはconfiguration changeが発生しない件

透明のActivityにはconfiguration changeが発生しない件

android:theme="@android:style/Theme.Translucent"を施すと、画面は透明になる。
しかし、configuration changeが発生しなくなる。
このため、端末を横位置にしても、画面は縦位置状態のままである。

ただし、全てがそうではない。

そこで実験をしてみた。
次のAndroidManifest.xmlに示したように、3個のActivityを設け、Intentにより、TransparentActivityはAnotherActivityを起動させ、AnotherActivityはCを起動させるようにした。
そして、各々のActivityにandroid:theme="@android:style/Theme.Translucent"を設けたり、設け無くしたりして、configuration changeに関する振る舞いを観察した。

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.Androyer.Transparent"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="8" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        >
        <activity
            android:name=".TransparentActivity"
            android:theme="@android:style/Theme.Translucent"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".AnotherActivity"
            >
        </activity>
        <activity
            android:name=".C"
            android:theme="@android:style/Theme.Translucent"
            >
        </activity>
        </application>
</manifest>


上記実験から得た知見は次の3点である。

・android:theme="@android:style/Theme.Translucent"を設けていないActivityでは、端末の位置を縦から横にした場合、onSaveInstanceStateメソッドが呼ばれる。

・android:theme="@android:style/Theme.Translucent"を設けていないActivityから呼ばれたActivityでは、android:theme="@android:style/Theme.Translucent"を設けていても、いなくても、端末の位置を縦から横にした場合、onSaveInstanceStateメソッドが呼ばれる。

・上記以外の場合には、onSaveInstanceStateメソッドは呼ばれない。

上記AndroidManifest.xmlファイルの例で説明すると次のとおりである。

・TransparentActivityの画面が表示されている状態では、端末を横位置にしても、画面は縦位置状態のままである。

・TransparentActivityからIntentでAnotherActivityの画面を表示させると、AnotherActivityにおいて、端末の位置を縦から横にした場合、onSaveInstanceStateメソッドが呼ばれる。 。

・AnotherActivityからIntentでCの画面を表示させると、Cにおいて、端末の位置を縦から横にした場合、onSaveInstanceStateメソッドが呼ばれる。

ここの説明において、「onSaveInstanceStateメソッドが呼ばれる」ということと、
「configuration changeが発生する」ということは、同義である。

参考:
半透明の程度を動的に変更する
実験:configuration changeは、画面の無いActivityでも発生するのか

0 件のコメント:

コメントを投稿