デフォルトのRecyclerView
ファーストスクロールを使用しており、それをサポートするためにthis guideに従っています。RecyclerView高速スクロール親指の高さが大きいデータセットでは小さすぎます
ここで問題は、親指がデータセットのサイズに従って高さのサイズを変更することです。 100以上の大きなアイテムの場合、親指は非常に小さくなり、ドラッグに反応することがほとんどできなくなります。
高速スクロールサムの最小高さを設定する方法はありますか。
デフォルトのRecyclerView
ファーストスクロールを使用しており、それをサポートするためにthis guideに従っています。RecyclerView高速スクロール親指の高さが大きいデータセットでは小さすぎます
ここで問題は、親指がデータセットのサイズに従って高さのサイズを変更することです。 100以上の大きなアイテムの場合、親指は非常に小さくなり、ドラッグに反応することがほとんどできなくなります。
高速スクロールサムの最小高さを設定する方法はありますか。
これは部分的な回答に過ぎません。私はパズルの1ピースを(少なくとも)欠いているが、うまくいけば誰かがそれを理解することができる。 、スクロールバーのつまみのサイズ/位置がLinearLayoutManager
内の三つの方法によって制御される(OPの質問にリンクの回答で述べたように)あなたが<RecyclerView>
タグに必要な属性を追加したら
:
int computeVerticalScrollRange()
:スクロールバーのトラックのサイズ。
int computeVerticalScrollExtent()
:スクロールバーの親指のサイズ。
int computeVerticalScrollOffset()
:スクロールバーのトラックの上端からスクロールバーの親の上端までの距離。
これらの方法の単位は任意です。 3つのメソッドがすべて同じユニットを共有している限り、好きなものを使用できます。
mSmoothScrollbarEnabled == true
:デフォルトにより、LinearLayoutManager
は単位の二組のいずれかを使用するRecyclerView
に見えるアイテムのピクセルサイズに基づいて、ユニットを使用します。
mSmoothScrollbarEnabled == false
:RecyclerView
のアダプタで表示されるアイテムの位置に基づいてユニットを使用してください。
スクロールバーの親指の大きさに自分自身を制御するには、あなたがこれらのメソッドをオーバーライドする必要があります...しかし、ここで私は欠けている作品です。私の実験の全てにおいてを、computeVerticalScrollExtent()
がで呼び出されることはありませんがシステム。それでも、ここではまだいくつかの進歩を示すことができます。
まず、アイテムの位置が内側にある500 CardView
を示す簡単なアダプタを作成しました。私はいくつかの本当にシンプルな(しかし醜い)ドロワブルで速いスクロールを可能にしました。ここでは、スクロールバーは単にデフォルトLinearLayoutManager
実装で次のようになります。
あなたは500(小)の項目で、見つけてきたように、スクロールバーのつまみは本当に小さいと上をタップするのは非常に困難です。 computeVerticalScrollRange()
をオーバーライドすることで、スクロールバーを大幅に大きくすることができます...私は大きな変化を示すためにランダムに本質的5000
を選んだ:あなたが期待するようになりましスクロールバーが動作しません、もちろん
を。通常のように親指を動かすことでリストをスクロールし、親指をドラッグしてリストをすばやくスクロールすることで、リストの移動がはるかに少なくなります。 「
@Override
public int computeVerticalScrollRange(RecyclerView.State state) {
return 5000;
}
@Override
public int computeVerticalScrollOffset(RecyclerView.State state) {
return (int) (super.computeVerticalScrollOffset(state)/23.5f);
}
しかし、これはまだdoesnの次のようcomputeVerticalScrollOffset()
をオーバーライド5000
のランダムに選択された範囲で自分のデバイスで
、
は、私はそれをドラッグして、リストをスクロールすると、スクロールバーのつまみが完全に移動します2番目の問題を修正しました。親指でドラッグするだけでリストが正しくスクロールされません。上で述べたように、computeVerticalScrollExtent()
をオーバーライドするのが適切なように思えますが、システムはこのメソッドを呼び出すことはありません。私はそれを単にオーバーライドして例外をスローし、私のアプリは決してクラッシュしません。
これは少なくとも、完全な解決策を求める正しい方向に人々を導くのに役立ちます。
PS:この回答に含まれているcomputeVerticalScrollRange()
とcomputeVerticalScrollOffset()
の実装は意図的に単純です(偽の読まれた)。 「本当の」実装ははるかに複雑です。デフォルトのLinearLayoutManager
実装では、デバイスの向き、リスト内の最初と最後の目に見える項目、両方向のオフスクリーン項目の数、滑らかなスクロール、さまざまなレイアウトフラグなどが考慮されます。
私のアプリにも同じ問題があります。リストサイズに応じて小さくなっていない修正サムを定義できますか? – egmontr
私のアプリケーションに同じ問題があります –
上記の答えは非常に限られています。あなたがしたいことの[例](https://bitbucket.org/StylingAndroid/scrollingrecyclerview/src/2fc7d871b911144b492744bb3a5097bb01869ac1?at=Part1)です。 –