タイトルバーやステータスバーの影を消す

背景を白くするには theme を AndroidManifest.xml

android:theme="@android:style/Theme.Light"

みたいに指定すれば ok。結果はこんな感じになる。

でも、よくみると、ヘッダーのところのが気になる。

これは

requestWindowFeature(Window.FEATURE_NO_TITLE);

などとして、タイトルバーを消しても出てくる。


この影を消す方法を探しても、すぐに見つけられなくて苦労したので日記に書いておく。
解決方法は自作のテーマを作って、そのテーマで android:windowContentOverlay を設定するだけ。
まず styles.xml で、オリジナルのテーマを作る。白い背景が好きなら Theme.Light を parent に指定するのが簡単ですな。

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<style name="MyTheme" parent="@android:style/Theme.Light">
		<item name="android:windowContentOverlay">@null</item>
	</style>
</resources>

で、このテーマを AndroidManifest.xml で、Application か Activity に設定する。とりあえず今回はapplicationに設定してみる。

	<application
		android:icon="@drawable/icon"
		android:label="@string/app_name"
		android:theme="@style/MyTheme">
		〜ここにactivityの設定とかが入る〜
	</application>

これで実行してみる。

影が消えてすっきり!!
画面の隅々まで、自分の思い通りのデザインにしたいときには必要だと思う。
まー、Android 1.6 だと色数が16bitしか出ないから残念なんだけど...。


この答えにたどり着いたときの流れ。

  • SDK の platforms のデフォルトで適当に grep
    • "Theme.Light" で grep して、"Theme.Light.NoTitleBar" や "Theme.Light.NoTitleBar.Fullscreen" の存在を知る
    • "Theme.Light.NoTitleBar" では影が消えなかったが、"Theme.Light.NoTitleBar.Fullscreen" だと影が無くなった
  • "Theme.Light.NoTitleBar.Fullscreen" の設定を見る
    • "android:windowFullscreen""android:windowContentOverlay" が設定されている
    • それぞれ設定した場合と、そうでない場合の動作を確認
      • 確定