2013-03-06 10 views
17

Sto sviluppando un'applicazione per Android TV. Ho un listview con un ImageButton + Textview s come bambini. Dato che la TV non usa gli eventi touch ma usa D-PAD o il trackball remoto, devo concentrarmi su tutti gli elementi cliccabili in modo che l'utente sappia dove si trova l'attenzione. Ma il problema è che posso ottenere attenzione nel braccio della lista se aggiungoAndroid ListView personalizzato con ImageButton non ottiene lo stato attivo

android:descendantFocusability="blocksDescendants"

nell'elenco personalizzato layout di fila ma ImageButton nella riga lista non sarà possibile ottenere attenzione. E se rimuovo il codice sopra allora ImageButton diventa attivo ma non riesco a fare clic sulla riga dell'elenco.

Inoltre ho aggiunto setItemsCanFocus per il mio ListView ma senza fortuna, non è cambiato nulla. Ho letto molti documenti ma non sono riuscito a trovare una risposta adeguata per questo problema. Voglio concentrarmi sia sulla riga Elenco che su ImageButton. E 'possibile, se qualcuno sa per favore aiutami ...

risposta

20

Devo concentrarmi su tutti gli elementi cliccabili in modo che l'utente sappia dove si trova l'attenzione. Ma il problema è che posso ottenere attenzione nel braccio della lista se aggiungo

View ottenere riagganciare a causa di molteplici viste all'interno di file di fila, per ottenere cliccare È necessario aggiungere una proprietà di più per il layout principale della fila xml.

android:descendantFocusability="blocksDescendants

Ma quando scrivo sopra proprietà allora io non sono in grado di concentrarsi ImageButton che è nel mio file di fila.

ho solo cercato un modo per acheive per ottenere foucus su ImageButton così come sulla listview.

Per ottenere focus su ImageButton:

  1. creare un file di selettore.
  2. Applicato su Imagebutton.
  3. Aggiunto android:focusableInTouchMode="true" a ImageButton.

Per ottenere attenzione per Listview:

  1. Aggiungi android:descendantFocusability="blocksDescendants al main-layout all'interno fila xml.

Ora quando fai clic sul tuo ImageButton si focalizzerà con il colore desiderato anche se si concentrerà anche su click listview.

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> 

Testato in S3 emulatore, funziona bene.

+0

Ho fatto tutte le cose di cui sopra ma non funziona in emulatore nexus 7 così come in TV. Penso che sia perché non c'è il touch screen per la TV così Android: focusableInTouchMode = "true" non funziona –

+0

Funziona anche nell'emulatore di nexus 7. – RobinHood

+0

La messa a fuoco sta per elencare riga e pulsante ...? –

1

Hai provato:

setFocusableInTouchMode(false); 

o

setFocusable(false); 

Su entrambi i tuoi articoli (ImageButton e TextView)?

+0

Grazie per il vostro tempo, ma se l'utente non può focus quindi con il controllo remoto l'utente non saprà se si trova sul corretto ImageButton ... –

6

Ho avuto lo stesso problema prima. Ho risolto il mio problema con l'aggiunta (al layout in xml)

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

Quindi il mio problema è stato risolto.

Nota: aggiunta solo android: focusableInTouchMode = "true" non funziona, È necessario rendere il layout cliccabile true, dopo focusableInTouchMode true.

4

Ho avuto lo stesso problema in listView ma ho trovato la soluzione, è sufficiente utilizzare imageView anziché il pulsante immagine, quindi la riga sarà selezionabile e selezionabile.

NOTA: ogni volta che utilizziamo button o imagebutton in listView la riga della vista elenco viene disattivata per impedire che ciò accada, utilizzare invece view o imageview.

Spero che questo ti possa aiutare.

+0

Non ho potuto far funzionare ImageButton anche con tutti i commenti suggeriti, ma questo ha funzionato. – bcorso

3

Aggiungere di seguito il codice per il layout madre di riga personalizzata,

android:descendantFocusability="blocksDescendants" 

e aggiungere sotto il codice a qualsiasi pulsante o ImageButton in quel layout di

android:focusable="false" 
android:focusableInTouchMode="false"