Centralización de diseño de Android en RelativeLayout para ListView personalizado

Realmente estoy tirando mi cabello sobre este. Algunos antecedentes. Tengo una lista de elementos que tienen todas las casillas de verificación junto a ellos. Cuando desmarca una casilla de verificación, aparecerá un botón que le permite eliminar el elemento de la lista. Esto parece al revés al principio, pero sólo queremos que los elementos "seleccionados" sean elegibles para procesamiento posterior, etc. Este es mi diseño:

<RelativeLayout android:id="@+id/rlBlahBlah" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBox android:text="" android:id="@+id/cbDeleteItem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:focusable="false" /> <TextView android:text="" android:id="@+id/tvItemText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14dip" android:paddingLeft="3dip" android:paddingRight="3dip" android:paddingTop="13dip" android:gravity="fill_vertical" android:layout_toRightOf="@id/cbDeleteItem" /> <Button android:layout_height="wrap_content" android:id="@+id/btnDelete" android:text="Delete" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:gravity="center_vertical" android:focusable="false" /> </RelativeLayout> 

No puedo conseguir los 3 elementos para centrar verticalmente en mi fila para salvar mi vida. layout_gravity , gravity , layout_centerVertical , nada de lo que funciona. Estoy seguro de que mi problema es un pequeño ajuste para voltear en alguna parte, pero realmente estoy en estado de ingenio en esto.

Editar: Sé que el textview es "fill_vertical", eso es algo al azar que estaba intentando.

Su problema probablemente no se deba al diseño, sino a cómo está inflando el diseño. De hecho, incluso podría ser mi culpa, dependiendo de dónde aprendiste tu técnica …

Para citar al omnipresente Romain Guy :

El uso correcto de inflar () en los adaptadores es:

Inflar (layoutId, padre, falso);

Pasar el padre (dado a usted como un parámetro en getView ()) permite que el kit de herramientas de interfaz de usuario para crear el objeto LayoutParams adecuado. Pasar false indica al toolkit que NO llame a parent.addView (theInflateChild), ya que ListView hará su propia magia más adelante.

Si utilizas inflate(layoutId, null) , como te inflate(layoutId, null) tradicionalmente, la vida está bien a menos que intentes usar RelativeLayout como el diseño de base de las filas y tratar de usar el centrado vertical.

Estaré actualizando mis libros y tal para reflejar el nuevo consejo en las próximas semanas.

Este atributo funcionó para mí centrando un Button utilizando RelativeLayout :

 android:layout_centerInParent="true" 

Vea esta publicación: ¿Puede centrar un botón en RelativeLayout?

Usando RelativeLayout, no tuve suerte con la gravedad ni layout_gravity.

Pero android:layout_centerVertical="true" trabajado para mí colocado en el hijo de mi RelativeLayout, por lo que puede mantenerlo si lo necesita.

Aquí hay un diseño que terminó haciendo exactamente lo que quería. Dejé RelativeLayout una vez que aprendí que ignora los atributos de layout_gravity (por supuesto ahora no puedo encontrar el post). De cualquier manera, anidados LinearLayouts hizo el truco para mí:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" android:id="@+id/llBlahBlahRowMain" android:padding="6dip"> <CheckBox android:text="" android:id="@+id/cbDeleteItem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:focusable="false" /> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_weight="1" android:layout_gravity="center_vertical" android:layout_height="wrap_content"> <TextView android:text="blah blah dynamically replaced text" android:id="@+id/tvItemText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="14dip" android:paddingLeft="3dip" android:layout_gravity="center_vertical" /> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnDelete" android:text="Delete" android:layout_gravity="center_vertical" android:focusable="false" /> </LinearLayout> 

¿Has probado android: gravity = "center_horizontal" como se hace referencia aquí

Hice una solución alternativa, que trabajó para mí. Puse, en mi elemento textbox, la propiedad android: layout_height = "fill_parent". De esta manera, el elemento de texto llenó todos los hieght de padre, por lo que el contenido se alinearon correctamente 🙂

 <TextView android:id="@+id/principal_li_descricao" android:layout_height="fill_parent" android:layout_width="wrap_content" android:layout_marginLeft="10dip" android:textColor="#ff000000" android:layout_centerVertical="true" android:gravity="center_vertical" android:layout_alignBottom="@+id/principal_li_icone" android:layout_toRightOf="@+id/principal_li_icone"/> 

Gracias

  • Problema con aapt.exe
  • Principiante Desarrollador: Desconocido Error: java.lang.nullPointerException
  • Encontrar el modelo de dispositivo y hacer
  • Cómo persistir las cookies de WebViewClient a URLConnection, navegador u otra técnica de descarga de archivos en android
  • Cómo guardar una imagen de Android Processing Sketch
  • ¿Cuáles son los usos correctos de @NonNull y @Nullable?
  • Álbum de Facebook y fotos no accesibles con todos los permisos necesarios (GRAPH API)
  • Marcadores no mostrados en el estilo MapView en Mapxbox Android
  • Implementación de DLNA / UPnP (Win7 Play To) en un dispositivo móvil
  • ¿Cómo aplicar span de fila en tablelayout?
  • Cómo utilizar Eclipse Memory Analyzer Tool (MAT) para analizar un hashmap
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.