2013-06-10 23 views
5

Desidero disattivare l'evidenziazione che appare quando l'utente seleziona una riga (listSelector) dal codice. Non voglio disabilitare le impostazioni onClick e abilitate (voglio ancora ascoltare i clic, voglio solo rimuovere l'evidenziazione).Android - Disabilita selezione ListView Selezione ma Keep OnClick abilitato

+0

quale adattatore stai usando? –

+0

Un semplice ArrayAdapter . Importa? –

+1

"Voglio disabilitare l'evidenziazione che appare quando l'utente seleziona una riga" - perché? Che dire degli utenti che usano i tasti freccia, D-pad e simili per navigare nella tua app? Si prega di consentire all'app di essere utilizzata da * tutti * gli utenti, non solo quelli che utilizzano il touchscreen. – CommonsWare

risposta

5

Basta creare un drawable che ha un colore trasparente in esso, qualcosa di simile:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:state_window_focused="false" android:drawable="@android:color/transparent"/> 

<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. --> 
<item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_light" /> 
<item android:state_focused="true" android:state_enabled="false" android:drawable="@drawable/list_selector_disabled_holo_light" /> 
<item android:state_focused="true" android:state_pressed="true" android:drawable="@color/transparent" /> 
<item android:state_focused="false" android:state_pressed="true" android:drawable="@color/transparent" /> 
<item android:state_focused="true" android:drawable="@drawable/list_focused_holo" /> 

</selector> 

E poi fissato dal codice o XML:

listView.setSelector(R.drawable.my_transparent_selector); 

Javadoc per questo metodo dice:

Impostare un Drawable che deve essere utilizzato per evidenziare la voce attualmente selezionata.

e l'attributo XML è:

Android: listSelector

Si può giocare con tutti gli stati, ricordate che avete anche lo stato di messa a fuoco.

+0

Dal codice, Nicolas, non l'XML. Posso gestirlo già da XML usando l'attributo listSelector. –

+0

Non so perché sia ​​necessario in questo modo, quindi mantieni due file e gioca con loro. –

+0

No, dopo la modifica, funziona correttamente. Sto usando una sorta di checkbox invece di evidenziare le righe. La tua risposta funziona come un fascino. Grazie. –

17

Specificare android:listSelector="@android:color/transparent" nel vostro ListView XML.

+0

Molto facile e fa il trucco! –

1

provare listview.setSelector(new ColorDrawable(Color.TRANSPARENT));

+0

Questo è stato il più facile per me, che va per un approccio programmatico grazie. – Zhang

4

ho fatto in questo modo:

Con l'aggiunta di due proprietà di ListView.

android:cacheColorHint="@android:color/transparent" 
android:listSelector="@android:color/transparent" 

tuo ListView dovrebbe appare come di seguito:

<ListView 
    android:id="@+id/listView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:cacheColorHint="@android:color/transparent" 
    android:listSelector="@android:color/transparent"> 

</ListView> 

Fatto

Problemi correlati