Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cambiar selección en un ListView de naranja a verde

¿Cómo hago esto por elemento de lista seleccionado?

He intentado añadir esto a android:background

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:state_pressed="false" android:drawable="@color/android_green" /> <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/black_alpha" /> <item android:state_focused="false" android:state_pressed="true" android:drawable="@color/black_alpha" /> <item android:drawable="@color/white_alpha" /> </selector> 

Pero no funciona, cambia todo el ListView.


Todavía no funciona, aquí está lo que tengo hasta ahora

:: listview_background

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:drawable="@color/black_alpha" /> <item android:drawable="@color/white_alpha" /> </selector> 

:: Mi punto de vista que utiliza lo anterior

 <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/round" android:listSelector="@drawable/listview_background"> </ListView> 

El problema es que la black_alpha aplicará la lista completa, no sólo el elemento de la lista seleccionada

  • Android: ¿Qué hacer si el rendimiento de ListView sigue siendo insuficiente?
  • ArrayAdapter en Fragmento - Android
  • Mantenimiento de un ListView donde cada elemento de lista tiene una relación de uno a muchos
  • Ocultar ListView Encabezado / Ocultar Single Divider en una lista
  • Android: teclado suave empuja toda la distribución, necesita cambiar el tamaño de la vista de lista
  • Agregar elementos a ListView, mantener la posición de desplazamiento y NO ver un salto de desplazamiento
  • Fragmento de NavigationDrawer con ListView y encabezado personalizado
  • Deshabilitar el desplazamiento de ListView al pasar ViewPager
  • 5 Solutions collect form web for “Cambiar selección en un ListView de naranja a verde”

    Aquí hay un buen artículo sobre cómo usar selectores con listas.

    En lugar de configurarlo para ser el android:background de la ListView, creo que desea establecer android:listSelector como se muestra a continuación:

     <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:divider="@null" android:dividerHeight="0dip" android:listSelector="@drawable/list_selector" /> 

    Jax, dijiste que:

    El problema es que la black_alpha aplicará la lista completa, no sólo el elemento de la lista seleccionada

    Yo tuve el mismo problema. Después de jugar con él durante un tiempo, pude conseguir que dejar de aplicar el color a toda la lista mediante el uso de una imagen png 3×3 del color que quería en lugar de aplicar un color. Así que por alguna razón extraña si utiliza un color que obtiene el comportamiento de fondo extraño, cuando se utiliza un png, funciona bien. S

    Así que es una manera de evitarlo.

    —–De otra manera———-

    Encontré los mejores resultados cuando establecí el selector listView para no tener ningún estado como este:

    Res / drawable / list_selector.xml

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> </selector> 

    Entonces cuido de todos los estados en el fondo del artículo de la lista. NO en el selector. Encontré que tenía más control de esta manera.

    Res / color / list_item_bg.xml

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

    Entonces aquí está mi artículo de la lista:

    Res / layout / simple_list_item.xml

     <?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="wrap_content" android:orientation="horizontal" android:paddingRight="45dip" android:paddingBottom="2dip" android:layout_gravity="center_vertical" android:background="@color/list_item_bg"> <ImageView android:id="@+id/arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="8dip" android:src="@drawable/list_item_arrow" /> <TextView android:id="@+id/simple_list_item_label" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:textSize="12sp" android:textColor="@color/list_label_color"/> </LinearLayout> 

    Yo también estaba frente a su problema donde el cambio de color se aplica a toda la lista.

    Pero ahora su trabajo para mí ahora:

    Mi página principal que contiene el listview (noté que no he aplicado el listselector aquí):

      <ListView android:id="@+id/controlList" android:layout_width="wrap_content" android:layout_height="wrap_content"/> 

    En lugar de aplicar el selector de listas a getView, es como decir que la fila en particular (convertView) para utilizar el listselector.xml en plegable plegable cuando su estado cambia, por ejemplo, presionado, enfocado …:

     @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView == null){ LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); convertView = li.inflate(R.layout.control_list, null); viewHolder = new ViewHolder(); viewHolder.topText = (TextView) convertView.findViewById(R.id.toptext); viewHolder.bottomText = (TextView) convertView.findViewById(R.id.bottomtext); convertView.setTag(viewHolder); } else{ viewHolder = (ViewHolder) convertView.getTag(); } //each convertView will be assigned the listselector convertView.setBackgroundResource(R.drawable.listselector); viewHolder.topText.setText(testSchemes[position]); //viewHolder.vText.setText(testDetails[position]); return convertView; } 

    Y finalmente mi listselector.xml:

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false" android:state_selected="false" android:drawable="@color/lightgreen" /> <!-- 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_pressed="true" android:drawable="@color/darkgreen" /> <item android:state_selected="true" android:state_pressed="false" android:drawable="@color/orange" /> </selector> 

    Esto es lo que hace el código anterior: Todas las entradas cuando se cargan por primera vez son lightgreen. Desplazarse hacia arriba y hacia abajo con el cursor resalta la entrada seleccionada naranja. Al presionar una fila, se vuelve verde oscuro.

    Como bigstones mencionado en un comentario, una solución de trabajo está usando una forma en vez de un color (yo también estaba consiguiendo la lista entera resaltada). Aquí hay una solución completa:

    Agregue estos 2 atributos al listview:

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

    Agregue my_list_selector.xml a la carpeta dibujable:

     <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#77526F35"/> </shape> 

    Ahora los elementos de la lista deben mostrar una superposición verde semitransparente en estado presionado.

    Me enfrenté al mismo problema y, a continuación, sólo necesitaba una línea simple en mi xml punto de vista.

      android:background="?android:attr/activatedBackgroundIndicator" 

    Ver este post: Esta publicación podría ayudar

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.