fitsSystemWindows:trueをstyle属性内で定義しないほうが良い

More than 1 year has passed since last update.

ハマったのでメモ。まぁ無視してもいいんですが。。。
( Issue 63653 - android - Toast text appears outside its container when fitsSystemWindows is set to true on the theme on android 4.4.2 - Android Open Source Project - Issue Tracker - Google Project Hosting を大雑把にイタコ翻訳しています )

Q. Android 4.4.2のテーマでfitsSystemWindowsをtrueにするとToastの文字がはみ出してしまう

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
    <item name="android:fitsSystemWindows">true</item>
</style>

って書いたらToastの文字がはみ出してしまう、こんな感じに!

image

A. android:fitsSystemWindowsはテーマではなくて、layout xmlで記述するよう意図されています。

themesに書くと、すべてのビューで定義が反映されます。たとえそれが反映してほしくないビューであっても。

なので、テーマではなくてlayout内で定義するようにしてください。

まとめ

<SomeView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    <!-- ... -->
</SomeView>

こんなふうに書いてね、ということのようです。

余談

そもそもandroid:fitsSystemWindowsがなぜ必要かというと、ステータスバーやナビゲーションバーを透過する処理を加えた時、これら領域にも描画できるようになるのですが、反面これら領域にボタンなどが表示された状態だとユーザーが押せないので、通常はpaddingなどを使って調整する必要があります。これを便利にやってくれる属性ということになります。

詳しくはyanzmさんの記事を。
- Y.A.M の 雑記帳: KitKat (Android 4.4) の UI について

国内のアプリ、あまりステータスバー透過を使っているものが多くないので、積極的に使っていきたい!