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).

¿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.

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

  • Android: ListView no se actualiza en notifyDataSetChanged ();
  • Vistas de varias listas de Android que no se desplazan de forma independiente
  • EditText en ListView sin reciclar entrada
  • Android Listview mantiene los elementos antiguos después de los cambios del adaptador
  • Android.R.color.transparent no es totalmente transparente
  • ClassCastException no puede convertir LinearLayout $ LayoutParams a AbsListView $ LayoutParams al establecer ListView Header
  • Infinite Auto Scroll ListView con velocidad de desplazamiento controlada
  • ¿Cuál es la diferencia entre BaseAdapter y ArrayAdapter?
  • ¿Cómo puedo añadir un encabezado pegajoso a mi ListView?
  • IndexOutOfBoundsException en mi adaptador Listview de Android
  • ListView de Android con mapas de Google
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.