Android, 時々Web

Androidアプリを作ったり、Webサービスを作ったりする中で困ったことや詰まったことを解決したときの備忘録です。備忘録なので、正しい答えが書いてあるとは限りません。

Theme.Translucentを使わずに半透明なActivityを作る。

Androidで半透明なActivityを作る場合、styles.xmlを編集し、Theme.Translucentを継承したスタイルを作ると良いです。というような記事がたくさん見つかります。

Activityを透過する « Tech Booster

これは誤りではなく、たしかに半透明にすることができます。

しかし、継承元のスタイルをTheme.Translucentにしてしまった場合、ActionBarのスタイルやデフォルトのActivityの背景色、文字色などが変わってしまいます。

せっかくオリジナルなstyleを作ったり、気に入ったstyleがあるのに、半透明にしたいがためにそれらが使えなくなってしまうのは残念だと思っていました。

そこでTheme.Translucentの実装を確認すると、このようになっていました。

<style name="Theme.Translucent">
<item name="windowBackground">@color/transparent</item>
<item name="colorBackgroundCacheHint">@null</item>
<item name="windowIsTranslucent">true</item>
<!-- Note that we use the base animation style here (that is no
animations) because we really have no idea how this kind of
activity will be used. -->
<item name="windowAnimationStyle">@style/Animation</item>
</style>

4行目に注目してください。それらしい属性があります。

 

試しに現在適用しているテーマにこの属性を追加してみると、普通に半透明にできました。

つまり、この属性さえあれば良いのです。

 

今のテーマを使いつつ、背景色を半透明にしたい場合、現在のstyles.xmlを次のように変更しましょう。

<resources>
<!-- Color -->
<drawable name="translucent_background">#80000000</drawable>
<!-- Custom Theme -->
<style name="AppTheme" parent="今利用しているテーマ">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@drawable/translucent_background</item>
</style>
</resources>

 

translucent_backgroundに指定した色・透明度がこのテーマの背景に反映されます。

 

テーマの指定方法や、styles.xmlに関する詳細な説明はこちら等をご参照ください。

アクションバーをカスタマイズする [Androidアプリのプログラミング] All About