Unknown Region

プログラムでハマったエラーとその解決方法についての備忘録メモ

【Android】ConstraintLayoutを使用時にbuttonが常に最前面に配置される問題

ConstraintLayoutを使用時に、ButtonがViewの追加順やaddView時のindexの値をガン無視して最前面に表示される問題に直面。

原因を探していたら、以下のリンクを発見。

z order in issue in ConstraintLayout Android - Stack Overflow

どうやらAPIレベルがLolipop(API 21)以降で、デフォルトで最前面にボタンが配置されるしようとなっているらしい。

上記の解決策に従って以下のコードを追加したら適切にボタンが表示されるようになった。

 

コード(Kotlin)

val button: AppCompatButton = AppCompatButton(context)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    button.stateListAnimator = null
}
constraintLayout.addView(button)

ただしaddViewをしたあとでstateListAnimatorにnullを突っ込んでもうまくいかない場合があり、これがどういうことなのかは不明。

きっとAndroidのライフサイクル的な問題なんじゃないかと思っている。