どうも。どっことです。今回はActivity
を透明にするための設定について解説します。
Activityを透明にする
完全に透明なActivity
でなにかしら処理する(つまりAPI通信する、DBの更新処理するなどを完全に透明なActivity
で実行する)のはユーザ観点ではよくないですが、例えばダイアログを表示するためだけのActivity
などであれば、背景が見えて別画面に見えてしまうのは不自然であるため、確かに透明である必要があります。そういった、不自然なことを回避する目的でActivity
を透明にする設定を紹介していきたいと思います。
設定方法
AndroidManifest.xml
で透明にしたいActivity
のtheme
に以下を設定します。
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
例えば、上記の設定を適用したtheme
をTransparentActivityTheme
として用意しました。
<style name="TransparentActivityTheme" parent="AppTheme.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
</style>
上記をAndroidManifest.xml
の透明にしたいActivity
のtheme
に適用します。以下はTransparentActivity
というActivity
に設定したときの例です。
<activity
android:name="com.sample.application.TransparentActivity"
android:theme="@style/TransparentActivityTheme"/>
orientation指定をするとクラッシュするので注意
ただし実際にアプリ内に組み込む場合、注意が必要です。透明なActivity
には危険が含まれているのです。
透明なActivity
に対してorientation
の指定をするとクラッシュします。実装でorientation
を指定したり、AndroidManifest
でのActivity
にscreenOrientation
を指定するとアプリがクラッシュするようです。呼び出し元のActivity
と同じorientation
で制御されるようなので、透明なActivity
を呼び出す時は気をつけてください。