Android listview semitransparente selección color de una fila
Tengo que implementar una selección semi-transparente de una fila en un listview, y para el estado "presionado" también.
Si aplico color sólido, entonces todo está funcionando como se esperaba. Pero si aplico el color semitransparente (# 44444444) entonces veo el color de selección por defecto (naranja en mi androide 2.3) y encima de él está mi color (se oscurece un poco de naranja).
- Tire para actualizar y cargar en listview
- Carga de la rueda giratoria de animación
- ArrayAdapter en Fragmento - Android
- Encabezados ListView de Android
- Android no puede encontrar el método desde el botón onClick en ListView Row
¿Por qué hay color naranja bajo mi uno? ¿Cómo arreglar este problema?
Aquí está mi código: Selector xml en drawable / listselectorinvisible.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false" android:state_selected="false" android:drawable="@color/transparent" /> <item android:state_pressed="true" android:drawable="@color/semitransparent" /> <item android:state_selected="true" android:state_pressed="false" android:drawable="@color/semitransparent" /> </selector>
La fila Listview se define en layout / topscore_row.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_height="wrap_content" android:layout_width="fill_parent" android:background="@drawable/listselectorinvisible"> <TextView android:layout_height="wrap_content" android:id="@+id/scrowNum" android:textColor="@color/fontButColor" android:text="#" android:textSize="24sp" android:layout_width="32dip" android:gravity="right|top" android:layout_gravity="top"></TextView> <LinearLayout android:layout_height="wrap_content" android:id="@+id/scrowNamLay" android:layout_width="142dip" android:orientation="vertical"> <TextView android:layout_height="wrap_content" android:paddingTop="2dip" android:layout_width="fill_parent" android:id="@+id/scrowPlayer" android:textColor="@color/fontButColor" android:text="@string/tblPlayer" android:textSize="24sp" android:paddingLeft="2dip"></TextView> <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/scrowOpPlayer" android:textColor="@color/fontButColor" android:text="@string/tblPlayer" android:textSize="14sp" android:paddingLeft="2dip"></TextView> </LinearLayout> <ImageView android:id="@+id/scrowImg" android:layout_height="wrap_content" android:src="@drawable/small_im_bt" android:padding="2dip" android:layout_marginTop="2dip" android:layout_width="26dip"></ImageView> <TextView android:layout_height="wrap_content" android:layout_width="48dip" android:id="@+id/scrowScore" android:layout_marginRight="5dip" android:gravity="right" android:textColor="@color/fontButColor" android:text="@string/tblScore" android:textSize="26sp"></TextView> <TextView android:layout_height="wrap_content" android:id="@+id/scrowTime" android:textColor="@color/fontButColor" android:text="@string/tblTime" android:gravity="center_horizontal" android:textSize="26sp" android:layout_width="58dip"></TextView> </LinearLayout>
Y finalmente el listview mismo:
<ListView android:layout_width="match_parent" android:id="@+id/scoreList" android:paddingLeft="5dip" android:paddingRight="5dip" android:cacheColorHint="#00000000" android:choiceMode="none" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:longClickable="false" android:layout_height="298dip"> </ListView>
Después de fallar el ajuste de color en xml, también traté de establecer listselectorinvisible en mi CustomArrayAdapter a través de convertView.setBackgroundResource (R.drawable.listselectorinvisible); Pero no hay suerte.
Código del CustomAdapter:
/* (non-Javadoc) * @see android.widget.ArrayAdapter#getView(int, android.view.View, android.view.ViewGroup) */ @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater)app.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.topscore_row, null); } Score score = objects.get(position); int color = getColor(position, score); if (score != null) { ImageView iv = (ImageView) v.findViewById(R.id.scrowImg); if (iv != null) { iv.setImageResource(imgs[score.gameType]); } TextView tv = (TextView) v.findViewById(R.id.scrowNum); tv.setText(Integer.toString(position+1) + "."); tv.setTypeface(app.mainFont); tv.setTextColor(color); .... .... } v.setBackgroundResource(R.drawable.listselectorinvisible); return v; }
Gracias de antemano.
- ¿Borrar el contenido de la lista?
- ListView animar elemento único
- Sólo en algunos teléfonos, ListView no se actualiza después de notifyDataSetChanged ()
- ¿Hay una buena razón para que un encabezado ListView ocupe una posición?
- Se ha intentado finalizar un evento de entrada pero el receptor de eventos de entrada ya se ha eliminado
- ¿Cómo puede inflar una presentación que contenga listview en un cuadro de diálogo de alerta?
- Implementación de onScrollListener para detectar el final de desplazamiento en un ListView
- Android: ¿Los elementos de las listas no se vuelven naranjas cuando se hace clic?
Tienes que configurar android:listSelector="@drawable/listcolor"
en ListView
Tu ListView será
<ListView android:layout_width="match_parent" android:id="@+id/scoreList" android:paddingLeft="5dip" android:paddingRight="5dip" android:cacheColorHint="#00000000" android:choiceMode="none" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:longClickable="false" android:listSelector="@drawable/listcolor" android:layout_height="298dip"> </ListView>
Echa un vistazo a la siguiente URl
Cómo establecer el color de la selección en ListView
Gracias Deepak
Después de horas de jugar con el mismo problema, finalmente conseguí una solución.
Primero, en el ListView set listSelector = "@ android: color / transparent" (por alguna razón @null no funciona aquí)
En segundo lugar, tenga el fondo más original de su fila ser un stateable drawable (posiblemente el color con estado) con state_pressed = "@ color / with_transparency"
No sé si importa pero el selector no tiene un estado predeterminado (que debería ser el último).
Además, no responde a su pregunta, pero en la fila top_score, considere la posibilidad de agregar lo siguiente a su xml, a su distribución raíz:
android:addStatesFromChildren="true"
Dirá el elemento de lista para captar el estado de los niños, es decir, para que un componente compuesto actúe como un componente único y tome el estado de cualquier componente dentro. (Por ejemplo, si se selecciona uno, entonces el componente compuesto se selecciona).
Saludos, Stéphane
- Geofences no funciona cuando se mata la aplicación
- Reemplazar el kernel preinstalado en la Plataforma Android