Closed5

スクロールの伝播について(Android)

Shun UematsuShun Uematsu
  • viewPager2やrecyclerViewはネストスクロールに対応していない
  • 一方ComposeのLazyRowやhorizontalScrollなどはネストスクロールに対応している
Shun UematsuShun Uematsu

Jetpack Composeでネストスクロールしてほしくない場合は、RecyclerViewやViewPager2で組んでそれをAndroidViewで組み込むしか無さそう。

Shun UematsuShun Uematsu

以下の記事にあるようにscrollableを指定してやると、ネストスクロールはされなくなるが、ストレッチが効かなくなったり、一番最後のページに遷移したあと少しの間スクロールができなくなったりする。
https://zenn.dev/anzuchi/articles/711535594ab11e

Shun UematsuShun Uematsu

背景

Jetpack Composeのいくつかのコンポーネントや修飾子(verticalScroll、horizontalScroll、scrollable、Lazy API および TextField)ではネストスクロールがデフォルトでサポートされています。

ネストスクロールによる困りごと

Jetpack Composeで以下のような画面を実装する際、HorizontalPagerをネストします。
その際画像のPagerのアイテムが末尾まで到達後、さらにスクロールすると次のタブに移動してしまいます。

// TODO: ここで実装例出す

改善してみたこと

scrollableモディファイアを使用して、親コンポーネントにスクロール操作を渡さないようにする

こちらの記事で私と全く同じ事象で困っており、その対応策が書かれています。こちらを試してみたところ確かに親にスクロール操作が渡らないようになったのですが、以下の問題がありました。

  • オーバースクロールが無効になってしまう
  • 末尾のアイテムまで来ても連続してスクロールした場合、なぜか逆方向のスクロールが一定時間効かなくなってしまう

参考URL

このスクラップは2023/03/11にクローズされました