web-dev-qa-db-ja.com

Android TV RecyclerViewフォーカスインタラクション

私は現在、通常のRecyclerViewGridLayoutManagerを使用しており、Android TVアプリのためにspanCountを別のviewTypeに依存しています。すべて正常に動作していますが、2つの問題があります。

  1. Dpadを長押しして項目間を高速でスクロールすると、RecyclerViewの子ではないビューにフォーカスが移ることがあります。
  2. RecyclerViewに現在のフォーカスされたビューをグリッドの中心に保つように指示するにはどうすればよいですか?

リストされている問題はVerticalGridViewライブラリのLeanBackを使用することで修正されているようですが、使用するLayoutMangerは内部のものであり、spanCountをサポートしていません。

26
Tepes Lucian

リサイクルビューは、Android TV。

1.focusableとfocusableInTouchodeをviewに追加します。コードを介してfocusListnerを追加し、ビューがクリックされるたびにフォーカスを要求します。

2.リサイクルビューに焦点を当てたアイテムを中央に保持するには、この例のようにレイアウトマネージャーをオーバーライドする必要があります。

RecyclerView smoothScrollを中央に配置します。Android

または

layoutManager.scrollToPositionWithOffset(position、offset)を使用します。ここで、位置重視のビューの位置とオフセットは、リサイクラビューの幅/ 2です。

2
sharath kumar
  1. 通常のRecyclerViewの場合、

    • 指定する必要がありました:Android:descendantFocusability="beforeDescendants"

    • また、Android:nextFocusDown="@+id/recyclerviewId"は、RV自体にフォーカスを送信するように設定されます。

  2. 私が見る唯一の解決策は、位置にアイテムを選択するキーリスナーですcurrentPosition + spancount

2
Geoffrey

これを確認しようとすることができます 回避策バグ で、RecycleViewフォーカススクロールでd-padでナビゲートします。

これが SOの質問 です。

ここでの問題は、GridLayoutManagerLinearLayoutManageronFocusSearchFailed()の実装を使用することです。これは、フォーカスがRecyclerViewの内側の境界に近づくと呼び出されます。 LinearLayoutManager's実装は、最初/最後の要素(スクロール方向に依存)のみを提供します。したがって、フォーカスは新しい行の最初/最後の要素にジャンプします。

したがって、この回避策は問題を解決するか、問題の解決方法についてのアイデアを提供するでしょう。

0
KENdi