18

私はAndroidTV用のアプリを開発しています。私は子供として+ sのalistviewを持っています。TVはタッチイベントを受信しませんが、D-PADまたはトラックボールリモコンを使用するため、ユーザーがフォーカスの場所を認識できるように、クリック可能なすべてのアイテムにフォーカスを合わせる必要があります。しかし、問題は、追加するとリスト行に焦点を合わせることができることですImageButtonTextview

android:descendantFocusability="blocksDescendants"

カスタムリスト行のレイアウトImageButtonでは、リスト行ではフォーカスが取得されません。上記のコードを削除するImageButtonとフォーカスが移りますが、リストの行をクリックできません。

またsetItemsCanFocus、私は自分のために追加しましたListViewが、運が悪かったので、何も変わりませんでした。私は多くの文書を読みましたが、この問題に対する適切な答えを見つけることができませんでした。リスト行と。の両方に焦点を当てたいImageButton。可能ですか、誰かが知っているなら私を助けてください...

4

5 に答える 5

24

ユーザーがフォーカスがどこにあるかを知るために、クリック可能なすべてのアイテムにフォーカスする必要があります。しかし、問題は、追加するとリスト行にフォーカスできることです

行ファイル内の複数のビューが原因でビューがハングアップし、クリックを取得するには、行 xml のメイン レイアウトにもう 1 つのプロパティを追加する必要があります。

android:descendantFocusability="blocksDescendants

しかし、プロパティの上に書くと、行ファイルにある ImageButton にフォーカスできません。

私はちょうど上ImageButtonと同様にフォーカスを得るために達成するための1つの方法を試みましたlistview.

ImageButton にフォーカスするには:

  1. 1 つのセレクター ファイルを作成します。
  2. Imagebutton に適用されます。
  3. android:focusableInTouchMode="true"ImageButton に追加されました。

Listview にフォーカスするには:

  1. android:descendantFocusability="blocksDescendants行 xml 内のメイン レイアウトに追加します。

ImageButton をクリックすると、リストビューのクリックにも焦点が当てられますが、目的の色に焦点が当てられます。

Selecotor.xml

<?xml version="1.0" encoding="utf-8"?>
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item 
        android:state_pressed="true"
        android:drawable="@android:color/transparent" 
        /> <!-- pressed -->    
    <item 
        android:state_focused="true"
        android:drawable="@android:color/darker_gray" 
        /> <!-- focused -->    
    <item 
        android:drawable="@android:drawable/btn_star" 
        /> <!-- default -->
</selector>

S3 エミュレーターでテスト済み、問題なく動作します。

于 2013-04-01T12:23:37.140 に答える
4

私はlistViewで同じ問題を抱えていましたが、解決策を見つけました。画像ボタンの代わりにimageViewを使用するだけで、行はクリック可能でフォーカス可能になります。

注: listView でボタンまたはイメージボタンを使用するたびに、リスト ビューの行が無効になり、代わりにビューまたはイメージビューを使用してこれが発生しないようにします。

これがあなたを助けることを願っています。

于 2013-04-02T13:29:30.703 に答える
3

以下のコードをカスタム行の親レイアウトに追加し、

android:descendantFocusability="blocksDescendants"

そのレイアウトの任意のボタンまたは ImageButton に以下のコードを追加します

android:focusable="false"
android:focusableInTouchMode="false"
于 2014-02-14T07:22:22.823 に答える
1

やってみました :

setFocusableInTouchMode(false);

また

setFocusable(false);

両方のアイテム (ImageButton と TextView) で?

于 2013-03-06T15:52:21.067 に答える