タイトルがイケてないが他に短い表現も思いつかなかったのでとりあえず。
課題
AppBarLayout内に3つのViewを配置。それぞれのapp:layout_scrollFlagsは上から順に以下の通り
- app:layout_scrollFlags="scroll"
- app:layout_scrollFlags="scroll"
- app:layout_scrollFlags="snap"
AppBarLayoutの下にはRecyclerViewがあり、スクロールさせるとAppBarLayoutの一番したが残る仕組み。 あるボタンが押下された時点で2番目のViewのVisibilityをGoneにしたら3番目のViewのsnapが効かなくなり、 スクロールするようになった。
対応
Visibilityの切替えはうまくいかなかったので回避策を取ることにした。
@BindView(R.id.second_view) lateinit var secondView: View //secondViewを非表示 appBar.removeView(secondView) //secondViewを表示 if (secondView.parent == null) { appBar.addView(secondView, 1) }
本来はvisibilityの変更とaddViewの場合の内部処理の違いを見つつ 対応したいところだがとりあえずこれで回避は可能。 バージョンやViewの内容によっても挙動は異なるのではないかと思う。