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のライフサイクル的な問題なんじゃないかと思っている。