Android 5.0 LollipopでImageViewがButtonの下に隠れる

4系では問題なく表示されていたToggleButtonにかぶせたImageViewが、Lollipopで表示されないという問題がありました。

image.png
4系

image.png
Lollipop

ちなみにレイアウト構成はこんな感じ。FrameLayoutで単純に2枚のViewを重ねているだけです。

image.png

ImageViewの背景色を変更して確認してみたところ、Viewの重なり順(Z-Order)が逆になってしまっていて、ToggleButtonの下にImageViewが入ってしまっているようでした。

マテリアルデザインの影響で、ボタンは影が入るようになったため、前面に移動してしまっているようです。

Android – Buttonのelevationを設定する方法 – Qiita

で、奥行きを修正するために、ImageViewの方をtranslationZで2単位ほど手前に出せば良いらしい。

Android 5.0 – ProgressBar cannot be displayed over a Button – Stack Overflow

<ImageView
android:id=”@+id/image”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:contentDescription=”@null”
android:scaleType=”fitCenter”
android:translationZ=”2dp”
tools:ignore=”UnusedAttribute” />

で、解決しました。

あ、translationZはAPI Level 21からのアトリビュートなので、プロジェクトの方も設定が必要です。

image.png

試してませんが、stateListAnimatorでやる方が正しいかもしれません。

あと、ToggleButtonに限らず、Button系はこの現象が起きるようです。ボタンの上に何かを重ねている人は注意。


新しく会社作りました!

コメントをどうぞ