2011-02-27 49 views

Respuesta

9

Uso setIndicatorBounds:

Establece los límites de dibujo para los indicadores (como mínimo, el indicador grupo se ve afectada por esto, el indicador de niño se ve afectada por esta si los límites de indicador hijo son establecidos para heredar)

-4

No hay forma directa de hacerlo.

mIndicatorLeft y mIndicatorRight son los dos campos en la clase ExpandableListView que manejan la ubicación del icono del indicador y son campos privados. Desafortunadamente, la posición del indicador no está configurada en un Layout bien definido como se esperaba, sino que se determina en dispatchDraw() en ExpandableListView. Se dibuja un rectángulo utilizando los valores superior/inferior y mIndicatorRight y mIndicatorLeft, el ícono del indicador se dibuja en este Rect. Debe cambiar la posición de este objecto Rect llamado 'indicatorRect' para mover su ícono de indicador.

para tener una idea de las cosas se puede ver este ejemplo http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html Cambiar el valor de relleno de Textview a 0 en getGenericView() en el ejemplo, se verá que el indicador se superpondrá el texto.

Su única opción es conseguir el código fuente de ExpandableListView y regular la mIndicatorRight y mIndicatorLeft valora a sí mismo mediante el establecimiento de la mIndicatorRight como item.getRight() y mIndicatorLeft como item.getRight() - 'el tamaño de los iconos'.

+0

nada de esto es correcto. – moonlightcheese

29

En realidad no hay una forma sencilla.

  1. Editar el código XML relacionado con la vista del grupo de la siguiente manera:

    <?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="35dp" 
    android:orientation="horizontal" > 
    
    <TextView 
        android:id="@+id/videos_explist_groupname" 
        android:layout_width="match_parent" 
        android:layout_height="?android:attr/listPreferredItemHeight" 
        android:layout_alignParentLeft="true" 
        android:layout_alignParentTop="true" 
        android:layout_toLeftOf="@+id/videos_group_indicator" 
        android:gravity="center" 
        android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" 
        android:textAppearance="?android:attr/textAppearanceListItem" /> 
    
    <ImageView 
        android:id="@+id/videos_group_indicator" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentRight="true" 
        android:layout_centerVertical="true" 
        android:src="@drawable/videos_chevron_collapsed" /> 
    
    </RelativeLayout> 
    

    Ver cómo el ImageView está a la derecha de la TextView.

  2. Editar su ExpandableListAdapter de la siguiente manera:

    @Override 
    public View getGroupView(final int groupPosition, final boolean isExpanded, final View convertView, final ViewGroup parent) { 
        View v; 
        if (convertView == null) { 
         v = newGroupView(isExpanded, parent); 
        } else { 
         v = convertView; 
        } 
        bindView(v, mGroupData.get(groupPosition), mGroupFrom, mGroupTo); 
        ((ImageView) v.findViewById(R.id.videos_group_indicator)) 
         .setImageResource(isExpanded?R.drawable.videos_chevron_expanded:R.drawable.videos_chevron_collapsed); 
        return v; 
    } 
    

    Como se puede ver usted puede configurar fácilmente el dibujable correspondiente al estado de grupo.

Sé que la pregunta fue hecha hace mucho tiempo, pero esto puede ayudar a alguien.

+0

¿Qué pones en la etiqueta del indicador dentro de la vista de una lista expandible? – Maxrunner

+5

'androide:? GroupIndicator = "@ nulo"' –

+0

@Bicou error de frente de '' IsExpanded ... – NagarjunaReddy

5

probar este

expList = getExpandableListView(); 
metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
width = metrics.widthPixels; 
//this code for adjusting the group indicator into right side of the view 
expList.setIndicatorBounds(width - GetDipsFromPixel(50), width - GetDipsFromPixel(10)); 

Y el GetDipsFromPixel es aquí

public int GetDipsFromPixel(float pixels) 
{ 
    // Get the screen's density scale 
    final float scale = getResources().getDisplayMetrics().density; 
    // Convert the dps to pixels, based on density scale 
    return (int) (pixels * scale + 0.5f); 
} 
+0

sin duda me ayudó, funciona como un encanto – dariusiv

Cuestiones relacionadas