ボタンの重なりとelevation

elevationで画面要素のz軸方向の高さを決めるが、そのときの発見。
ボタンが重なった時、どう反応するかということ。

結論からいくと、重なったボタンがあるとき、上(elevationの値が大きいほう)のボタンが反応するときと、そうでないときがある。
両方のボタン下のボタンのelevationを0dp、上のボタンのelevationを2dpとすれば意図どおり上が反応するが、それ以外のときはよくわからない。

なぜこういうことを考えたかというと、「画面のどこでもタップすればヘルプに飛ぶ」というようなアプリを作ろうと考えて、画面全体を覆うような透明なボタンを作った。そのうえで、一時的に画面に普通のボタンを表示して、それはまた別の機能を持つようにしようと思ったところ、後者のボタンを押すと前者の透明なボタンが反応してしまう。
そこで、elevagionを操作すればこの問題が解決できるのでは、と考え、透明なボタンを10dp、一時的な普通のボタンを20dpに設定し、これならより上にある後者のボタンが反応するだろう、と思ったのだが、うまくいかず、やっぱり前者の透明なボタンが先に反応してしまう。で、いつものように悩んでいた。

この問題は、たまたま、透明なボタンのelevationを0dp、一時的なボタンのelevationを2dpとすることで解決できた。0dpと1dpではうまくいかないときがあり、また、3dp以上でもうまくいかないことがあった。
なお、ImageViewやTextViewはこれとは関係なく、それらが上にあってsetOnClickListenerが設定されていても、下にあるボタンのほうが優先的に機能するみたいだ。

「ようだ」とか「みたいだ」が多い記事ですみません。今度時間のあるときにちゃんと検証しようと思います。

コメント

このブログの人気の投稿

目覚まし時計アプリを公開します

超初心者の機械学習入門

画面回転で苦労した話(原因はわかった)