2023年10月10日火曜日

Android Activityを透明にするための設定を解説

どうも。どっことです。今回はActivityを透明にするための設定について解説します。

Activityを透明にする

完全に透明なActivityでなにかしら処理する(つまりAPI通信する、DBの更新処理するなどを完全に透明なActivityで実行する)のはユーザ観点ではよくないですが、例えばダイアログを表示するためだけのActivityなどであれば、背景が見えて別画面に見えてしまうのは不自然であるため、確かに透明である必要があります。そういった、不自然なことを回避する目的でActivityを透明にする設定を紹介していきたいと思います。

設定方法

AndroidManifest.xmlで透明にしたいActivitythemeに以下を設定します。

<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>

例えば、上記の設定を適用したthemeTransparentActivityThemeとして用意しました。

<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の透明にしたいActivitythemeに適用します。以下はTransparentActivityというActivityに設定したときの例です。

<activity
    android:name="com.sample.application.TransparentActivity"
    android:theme="@style/TransparentActivityTheme"/>

orientation指定をするとクラッシュするので注意

ただし実際にアプリ内に組み込む場合、注意が必要です。透明なActivityには危険が含まれているのです。 透明なActivityに対してorientationの指定をするとクラッシュします。実装でorientationを指定したり、AndroidManifestでのActivityscreenOrientationを指定するとアプリがクラッシュするようです。呼び出し元のActivityと同じorientationで制御されるようなので、透明なActivityを呼び出す時は気をつけてください。

参考

移行予定

どうも。どっことです。 タイトルの通りですが、諸事情により GitHubPage に移行予定です。 https://mkt120.github.io/ この備忘録に記載の内容を転記しつつ、今後はこちらのページを更新していく予定です。