Pregunta

Estoy usando ExpandableListView en mi aplicación y una de las quejas que recibo de los usuarios es que cuando el List El artículo se expande, es difícil distinguir visualmente dónde termina el elemento infantil y comienza el siguiente elemento grupal.

Así que me gustaría cambiar el trasfondo del niño List Artículo a la sombra diferente.

Los intentos brutales que he hecho hasta ahora se basaron en cambiar directamente el color de fondo y el texto de los elementos dentro del niño View Artículo, pero eso conduce a la pérdida de flotantes y aspectos destacados. Entonces mi pregunta es: ¿cuál es una buena estrategia para lograr lo anterior?

Lo intenté styles y selectors Pero lo que realmente me traza es que si cambio de fondo para el elemento infantil, entonces necesito agregar selectors Para todas las combinaciones de enfoque/habilitado, etc. Cuando todo estoy tratando de hacerlo para sobrescribir una sola cosa.

¿Hay alguna forma de heredar a los padres? style y establecer background Solo para el artículo infantil habilitado y no centrado con otros styles retenido?

¿Fue útil?

Solución

Bueno. Esto es lo que funcionó para mí:

  1. Crear list_background.xml en su proyecto res/drawable directorio
  2. Establezca el valor de fondo del diseño de nivel superior del elemento de su hijo en el dibujo anterior. Si se está rascando la cabeza en este punto, me refiero al archivo de diseño XML que se usa cuando crea una vista infantil de su lista expandible en ExpandableListAdapter#getChildView

Aquí hay un archivo dibujable completo

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:state_enabled="true"
        android:drawable="@drawable/list_highlight_active" />
    <item android:state_enabled="true" android:state_selected="true" 
        android:state_window_focused="true"
    android:drawable="@drawable/list_highlight_inactive" />
    <item android:state_enabled="true" android:state_window_focused="true" 
        android:drawable="@color/item_body" />
    <item android:drawable="@color/item_body" />
</selector>

Tuve que copiar list_highlight_active.xml y list_highlight_inactive.xml de /android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable al directorio dibujable de mi proyecto. @color/item_body es solo un tono de gris

Otros consejos

Acabo de descubrir una forma de "algo" establecer el color de fondo sin tener que saltar a través de los aros selectores.

Como ha señalado, establecer el fondo en un color sólido limpia los resaltados del selector porque el nuevo color de fondo lo oscurece. Droidin tiene lo que es la solución normal: proporcione su propio selector de fondo con los colores exactos que desea. Es un dolor decir lo menos.

Pero si todo lo que quieres es una pequeña diferenciación de color, entonces hay una forma más simple: Alpha Blend. Establezca su color de fondo con un valor alfa. Por ejemplo, establezca fondo en "#BBFFFFFF". Los primeros dos dígitos indican el nivel alfa. Todo se mezclará para que el fondo no sea un blanco puro y el resaltado de la selección no será el naranja brillante normal, pero los niños serán de un color diferente y lo más destacado aún funciona. Ganar-ganar.

I search for similar solution. You can try get parent View on adapter method getChieldView. I think this parent is a parent view of your all chields. And set background from resource to this parent. I make it like this :

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,  View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.fa_report_sub_item, null);
        View parentGroup=(View) convertView.getParent();
        parentGroup.setBackgroundResource(R.drawable.fa_summ_report_main_item);
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top