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 件のコメント:
コメントを投稿