私はこれまで約6時間費やしてきましたが、障害になっているだけです。一般的な前提は、ウィジェットとListView
を含む行が(アダプターによって生成されたか、ヘッダー・ビューとして追加されたかにかかわらず)あることです。私がやりたいのは、ジョグボール/矢印を使用して、セレクターを通常のように個々のアイテムにナビゲートできるようにすることですが、特定の行に到達すると、行を明示的に識別しなければならない場合でも、フォーカス可能な子供、セレクターで位置を示すのではなく、その子供に焦点を合わせてもらいたい。EditText
Button
私は多くの可能性を試しましたが、これまでのところ運がありませんでした。
レイアウト:
<ListView
android:id="@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
ヘッダービュー:
EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
アダプタに他の項目があると仮定すると、矢印キーを使用すると、期待どおりにリスト内で選択範囲が上下に移動します。ただし、ヘッダー行に到達すると、セレクターにも表示されEditText
、ジョグボールの使用に集中する方法はありません。注:をタップするEditText
と、その時点でフォーカスが移動しますが、タッチスクリーンに依存しているため、必須ではありません。
ListView
この点に関して、明らかに2つのモードがあります
。1 setItemsCanFocus(true)
。:セレクターは表示されませんがEditText
、矢印を使用するとフォーカスを取得できます。フォーカス検索アルゴリズムは予測が難しく、どの項目が選択されているかについて視覚的なフィードバック(どの行でも:フォーカス可能な子があるかどうか)がないため、どちらもユーザーに予期しないエクスペリエンスを与える可能性があります。
2 setItemsCanFocus(false)
.:セレクターは常に非タッチモードで描画され、EditText
タップしてもフォーカスを取得できません。
さらに悪いことに、呼び出しeditTextView.requestFocus()
はtrueを返しますが、実際にはEditTextにフォーカスを与えません。
私が想定しているのは、基本的に1と2のハイブリッドです。ここでは、すべてのアイテムがフォーカス可能かどうかのリスト設定ではなく、リスト内の1つのアイテムのフォーカス可能性を設定して、セレクターが選択からシームレスに移行するようにします。フォーカスできないアイテムの場合は行全体、フォーカス可能な子を含むアイテムの場合はフォーカスツリーをトラバースします。
テイカーはいますか?