Cómo resaltar ListView-Items
Tengo el siguiente problema.
Tengo un ListView con las filas de encargo que consisten en una vista de la imagen y un textview. El código xml de la vista de texto es
- Android listview viewholder. Cuándo usarlo, y cuándo no
- Android.content.res.Resources $ NotFoundException al establecer programación android.R.attr.listChoiceIndicatorMultiple
- Listview error: "Su contenido debe tener un ListView cuyo atributo id es 'android.R.id.list'"
- ¿Cómo hacer ListView personalizado con fondos de colores de los elementos?
- Cambiar el color de fondo y color de texto del elemento de fila listview en android
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="26px" android:layout_marginLeft="3px" android:singleLine="true" android:ellipsize="end" android:textColorHighlight="#FEC403" />
Entonces tengo un itemclicklistener que funciona bien y quiero resaltar el texto que se ha hecho clic haciendo lo siguiente.
public void onItemClick(AdapterView<?> adaptview, View clickedview, int position, long id) { //TODO: ACTIONS String pathtofile = (String) adaptview.getItemAtPosition(position); View rowview = (View) adaptview.getChildAt(position); rowview.setSelected(true);}
Quería que el color de resaltado fuera "# FEC403" en el xml (que es un naranja claro), pero el color de resaltado sigue siendo gris. ¿Cómo fijar el highlightcolor correctamente?
gracias por adelantado
EDITAR:
Aquí es cómo lo hice finalmente:
Este es mi archivo ListView xml file:
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/rowselector" > <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/musicicon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:src="@drawable/musicicon" android:paddingLeft="3px" /> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="26px" android:layout_marginLeft="3px" android:singleLine="true" android:ellipsize="end" android:focusable="false" />
Y el rowselector.xml:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@color/orange" /> </selector>
Y por último mi OnItemClick es muy corto ahora:
@Override public void onItemClick(AdapterView<?> adaptview, View clickedview, int position, long id) { //TODO: ACTIONS clickedview.setSelected(true); }
- El elemento ListView no extenderá el ancho a fill_parent
- Cambiar dinámicamente la altura de la fila en una vista de lista basada en el número de elementos de la lista
- agregar clic Listner en cada elemento de fila en ListView
- Cómo cambiar el color de los elementos de ListView en el enfoque y al hacer clic
- Android ListView con diferentes diseños para cada fila
- Android ListView resalta el elemento mediante programación
- Separadores ListView con un CursorAdapter
- Cómo cargar elementos en el widget de vista de lista de inicio de android?
Debe utilizar un Selector
.
Esta pregunta y su respuesta podrían ayudar ….
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long arg3) { for(int a = 0; a < parent.getChildCount(); a++) { parent.getChildAt(a).setBackgroundColor(Color.BLACK); } view.setBackgroundColor(Color.RED); }
En su Actividad:
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long itemid) { itemOnclickList(position, view); } }); public void itemOnclickList(int position, View view) { if (listview.isItemChecked(position)) { view.setBackgroundDrawable(getResources().getDrawable(R.drawable.image_checked)); } else { view.setBackgroundDrawable(getResources().getDrawable(R.drawable.image_uncheck)); } adapter.notifyDataSetChanged(); }
En su adaptador:
public View getView(int position, View view, ViewGroup parent) { View convertView = inflater.inflate(R.layout.listdocument_item, null); ListView lvDocument = (ListView) parent; if (lvDocument.isItemChecked(position)) { convertView.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.image_checked)); } else { convertView.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.image_uncheck)); } return convertView; }
¡Buena suerte!
Así es como debe ser usando el selector:
Cree un archivo dentro de drawable llamado selector_listview_item.xml
, que se parece a (cambie los colores a su propio):
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- pressed --> <item android:drawable="@color/md_grey_200" android:state_pressed="true" /> <!-- default --> <item android:drawable="@color/white" /> </selector>
Ahora en su diseño que describe la fila de la lista (por ejemplo, layout_list_row.xml), en el diseño de la raíz, añada el android:background="@drawable/selector_listview_item"
, por lo que el diseño sería algo así como:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:background="@drawable/selector_listview_item" <!-- this is the important line --> android:orientation="vertical"> <!-- more stuff here --> </LinearLayout>
(Nota: es posible que desee añadir android:focusable="false"
en los elementos dentro de esa fila listview, para hacer que la fila haga clic, como se menciona aquí )
Hecho.
- Cómo cargar YouTubePlayer utilizando YouTubePlayerFragment dentro de otro Fragmento ?? (Androide)
- CMUSphinx PocketSphinx – Reconocer todo (o gran cantidad) de palabras