2013-03-06 11 views
17

Android TVのアプリを開発しています。私は子供のようにImageButton + Textviewを持つlistviewを持っています。テレビではタッチイベントは発生しませんが、D-PADまたはトラックボールリモートを使用するため、すべてのクリック可能なアイテムに焦点を合わせる必要があります。そのため、ユーザーはフォーカスがどこにあるかを知ることができます。しかし、問題は、私はカスタムリストの列レイアウトでImageButtonを使用したAndroidカスタムListViewのフォーカスが得られません。

android:descendantFocusability="blocksDescendants"

を追加した場合、私は、リストの行にフォーカスを取得できることですが、リストの行のImageButtonがフォーカスを取得することはできません。 上記のコードを削除した場合、ImageButtonがフォーカスを取得しますが、リスト行をクリックすることはできません。

また、私はのためにsetItemsCanFocusを追加しましたが、何も変わりません。 私は多くの文書を読んだが、私はこの問題に対して適切な答えを見つけることができなかった。リストの行と、ImageButtonの両方に注目したい

setFocusableInTouchMode(false); 

または

setFocusable(false); 

を両方のアイテム(のImageButtonとのTextView)の場合:いずれかが私を助けてください知っている場合

答えて

20

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

クリックすると複数のビューが表示されるため、ハングアップすることがあります。行xmlのメインレイアウトにもう1つのプロパティを追加する必要があります。

android:descendantFocusability="blocksDescendants

しかし、私は財産上書くとき、私は私の行ファイルにあるのImageButtonを集中することはできませんよ。

私はちょうどImageButton上だけでなく、listviewにfoucusを取得するためにacheiveする一つの方法を試してみました。 1つのセレクタファイルを作成します

  1. :のImageButtonに焦点を取得するには

  2. イメージボタンに適用されます。
  3. ImageButtonにandroid:focusableInTouchMode="true"を追加しました。

は、リストビューにフォーカスを取得するには:

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

ImageButtonをクリックすると、リストビューのクリックにも焦点を当てますが、あなたの望みの色に合わせてフォーカスします。S3エミュレータでテスト

<?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> 

Selecotor.xmlは、うまく動作します。

+0

上記のすべてのことをしましたが、nexus 7エミュレータとテレビでは動作しません。私はそれはテレビのためのタッチスクリーンがないので、そのと思うので、アンドロイド:focusableInTouchMode = "true"は動作していません –

+0

それもネクサス7エミュレータで動作します。 – RobinHood

+0

フォーカスは行とボタンのリストになりますか? –

1

は、あなたが試してみました...、それは可能ですか?

+0

感謝を追加リモコンでフォーカスすると、ユーザーは正しいImageButtonにいるかどうかわかりません。 –

6

私は前に同じ問題がありました。私は問題を解決しました(xmlのレイアウトに)

android:focusableInTouchMode="true" 
android:clickable="true" 

私の問題は解決しました。

注:android:focusableInTouchMode = "true"のみを追加することはできません。focusableInTouchModeをtrueにした後、レイアウトをクリック可能にする必要があります。

4

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

注:listViewでbuttonまたはimagebuttonを使用するときは、リストビューの行が無効になり、代わりに使用ビューまたはイメージビューが使用されなくなります。

これはあなたを助けるでしょう。

+0

提案されたすべてのコメントでもImageButtonを動作させることができませんでしたが、これはうまくいきました。 – bcorso

3

、カスタム行の親のレイアウトにコードの下に

android:descendantFocusability="blocksDescendants" 

を追加し、そのレイアウトで任意のボタンまたはのImageButtonにコードの下に、あなたの時間のためではなく、ユーザーができない場合

android:focusable="false" 
android:focusableInTouchMode="false" 
関連する問題