私は現在、通常のRecyclerView
とGridLayoutManager
を使用しており、Android TVアプリのためにspanCount
を別のviewType
に依存しています。すべて正常に動作していますが、2つの問題があります。
RecyclerView
に現在のフォーカスされたビューをグリッドの中心に保つように指示するにはどうすればよいですか?リストされている問題はVerticalGridView
ライブラリのLeanBack
を使用することで修正されているようですが、使用するLayoutManger
は内部のものであり、spanCount
をサポートしていません。
リサイクルビューは、Android TV。
1.focusableとfocusableInTouchodeをviewに追加します。コードを介してfocusListnerを追加し、ビューがクリックされるたびにフォーカスを要求します。
2.リサイクルビューに焦点を当てたアイテムを中央に保持するには、この例のようにレイアウトマネージャーをオーバーライドする必要があります。
RecyclerView smoothScrollを中央に配置します。Android
または
layoutManager.scrollToPositionWithOffset(position、offset)を使用します。ここで、位置重視のビューの位置とオフセットは、リサイクラビューの幅/ 2です。
通常のRecyclerView
の場合、
指定する必要がありました:Android:descendantFocusability="beforeDescendants"
また、Android:nextFocusDown="@+id/recyclerviewId"
は、RV自体にフォーカスを送信するように設定されます。
私が見る唯一の解決策は、位置にアイテムを選択するキーリスナーですcurrentPosition + spancount
。
これを確認しようとすることができます 回避策 の バグ で、RecycleView
フォーカススクロールでd-padでナビゲートします。
これが SOの質問 です。
ここでの問題は、GridLayoutManager
がLinearLayoutManager
のonFocusSearchFailed()
の実装を使用することです。これは、フォーカスがRecyclerView
の内側の境界に近づくと呼び出されます。 LinearLayoutManager's
実装は、最初/最後の要素(スクロール方向に依存)のみを提供します。したがって、フォーカスは新しい行の最初/最後の要素にジャンプします。
したがって、この回避策は問題を解決するか、問題の解決方法についてのアイデアを提供するでしょう。