ListSelector si applica all'integer elenco

Ho una semplice list con un elenco di elenchi così.

<ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/round" android:listSelector="#99000000" android:clickable="true" android:cacheColorHint="#00000000" android:background="#00000000"> </ListView> 

Come potete vedere Android: listSelector = "# 99000000" ma il colore "nero alfa" viene applicato all'integer elenco, non all'elemento selezionato.

  • Come trovare la temperatura della città per longitudine e latitudine in android?
  • Libgdx, cambia passo in Musica
  • Come posso inserire i controlli sullo schermo?
  • Portare AOSP a un dispositivo hardware specifico
  • Mono per macro di preprocessre per Android
  • Ottenere intestazione dalla risposta (Retrofit / Client OkHttp)

  • Quindi questo è quello che ho, ma l'intera list diventa ancora nera

    :: listview_background.xml

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:state_focused="true" android:drawable="@drawable/list_normal" /> <item android:state_pressed="true" android:drawable="@drawable/list_pressed" /> <item android:state_focused="true" android:drawable="@drawable/list_active" /> </selector> 

    :: colors.xml

     <resources> <drawable name="list_normal">#96FFFFFF</drawable> <drawable name="list_active">#66000000</drawable> <drawable name="list_pressed">#CA000000</drawable> </resources> 

    :: il tag xml nella mia list

     android:listSelector="@drawable/listview_background" 

    6 Solutions collect form web for “ListSelector si applica all'integer elenco”

    Ho avuto lo stesso problema. Ho un'image di background personalizzata, e non voglio fare varianti di quella image di background, perché sarebbe noiosa rappresentare tutti i diversi stati.

    Quindi voglio fare la cosa ovvia, avere una barra semi-trasparente che è sovrapposto in cima all'elenco focalizzato e quando l'utente fa clic sul tasto "enter" o qualsiasi altra cosa, lampeggia al colore sovrapposto pressato che è più impressionante e un po ' più opaco.

    La soluzione era quella di stare lontani da qualsiasi @color o @drawable che si riferisce ad un colore all'interno di listSelector. Ho creato due file 3xpx di 3×3 pixel. Ciascuno viene salvato con lo strato gamma. Nel mio caso sono due dello stesso colore ciascuno mescolato in Gimp con una trasparenza diversa sullo strato di colore. Quindi, quando si seleziona un elemento si ottiene una sovrapposizione con il colore del 25%, e quando lo si premere si ottiene un png con il colore del 50%. Li ho messi nei miei drawables come bg_list_item_pressed.png e bg_list_item_highlighted.png

    Poi ho impostato il selettore di elenco su:

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Selected --> <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/bg_list_item_highlighted" /> <!-- @drawable/tab_focus --> <!-- Pressed --> <item android:state_pressed="true" android:drawable="@drawable/bg_list_item_pressed" /> <!-- @drawable/tab_press --> </selector> 

    Quindi ho aggiunto i miei attributi ListSelector al mio ListView nel mio layout xml:

     android:listSelector="@drawable/list_selector" android:drawSelectorOnTop="true" 

    Ora funziona esattamente come voglio lavorare. Comprendendo l'utilizzo del D-pad per select una row e cliccate con enter. Ottenere i colors di evidenziazione e successivi premendo esattamente come dovrebbero essere.

    Ho avuto questo stesso problema e mentre guardavo uno dei file XML disegnati in piattaforma ho notato un modo per eliminare la necessità di creare un file di image solo per un colore, creando una forma in XML.

    Ad esempio, invece di:

     <item android:state_focused="true" android:drawable="@drawable/list_active" /> 

    Fare:

     <item android:state_focused="true"> <shape> <solid android:color="#66000000" /> </shape> </item> 

    Oltre a creare semplicemente un disegno a colors chiaro, la forma è flessibile, simile a un semplice object vettoriale. Tutti i dettagli possono essere trovati qui: http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

    Se si sta impostando un layout di row per each elemento nell'elenco, questo è il modo in cui lo faccio. Notare il valore trasparente impostato sull'elenco Selettore. (Per la brevità ho rimosso i colors.xml.)

    main.xml

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:listSelector="#00000000"/> </LinearLayout> 

    row.xml

     <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/row" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:background="@drawable/list_selector"> ... </FrameLayout> 

    list_selector.xml

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="#66FFFFFF" /> <item android:drawable="#FF666666"/> </selector> 

    Jax,

    Stavo cercando di capire perché la mia intera list stava cambiando il colore impostando l'elenco Selector e ha scoperto che questo è esattamente quello che dovrebbe fare, cioè stiamo impostando il colore per l'intera list e non la row che è quello che abbiamo volere.

    Ecco cosa vuoi fare: suppongo di avere un ListView definito in XML. E per questo ListView, suppongo che utilizzi un adattatore di qualche tipo per impostare i dati presentati. Anche per questa scheda, si utilizza una vista di row definita in XML. Quello che vuoi fare è impostare lo background di questo elemento di row come questo:

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:background="@drawable/textview_selector"> <TextView android:id="@+id/textForList" android:layout_height="fill_parent" android:layout_width="wrap_content" android:padding="10sp" /> </LinearLayout> 

    Ecco il mio textview_selector.xml memorizzato in disegni:

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/teal" /> <item android:drawable="@drawable/white" /> </selector> 

    Spero che questo ti aiuti

    Il selettore di elenco è un StateListDrawable – contiene riferimenti a più drawables per each stato che l'elenco può essere, come selezionato, focalizzato, premuto, disabilitato …

    Nel tuo caso, impostando un singolo colore, l'elenco sta disegnando # 9000 per each singolo stato.

    È necessario definire un StateListDrawable come descritto in precedenza, con XML simile al seguente. Questo è ciò che hai impostato nel tuo android:listSelector attributo.

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:state_focused="true" android:drawable="@drawable/item_disabled" /> <item android:state_pressed="true" android:drawable="@drawable/item_pressed" /> <item android:state_focused="true" android:drawable="@drawable/item_focused" /> </selector> 

    O, per impostare lo stesso selettore di elenco per tutti gli elenchi dell'applicazione, è ansible ignorare il selettore nel tema Widget.ListView :

     <style name="Widget.ListView" parent="Widget.AbsListView"> <item name="android:listSelector">@drawable/my_custom_selector</item> </style> 

    Non è sempre necessario creare un'image, è ansible definire una forma

     <?xml version="1.0" encoding="utf-8"?> 

     <item android:state_focused="true" android:state_pressed="false"> <shape android:shape="rectangle"> <solid android:color="#40000000"/> </shape> </item> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="#80000000"/> </shape> </item> 

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.