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.
- Cómo cerrar / matar una aplicación en un dispositivo Android con appium?
- Java: Subclase AsyncTask
- La textura de OpenGL no sigue la geometría
- Android cómo llamar a startActivityForResult dentro de un adaptador
- LinearLayout minHeight no funciona con weigth = "1"
Editar: Sé que el textview es "fill_vertical", eso es algo al azar que estaba intentando.
- Java Java FATAL EXCEPTION java.lang.NullPointerException
- SetContentView provoca excepción de puntero nulo
- Imagen seleccionada de gallary no va a establecer en ImageView
- Cómo cambiar programatically Edittext Cursor Color en android?
- Excepción sobre la serialización de array usando proguard android
- Capaz de hacer clic en dos elementos al mismo tiempo en un RecyclerView
- ¿Cómo puedo acceder a mi APT REST local desde mi dispositivo Android?
- Píxeles a las inmersiones, al escritorio y al android
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
- ¿Por qué `android: screenOrientation =" detrás "` no hay efecto en android 4.1.2?
- Android Jack: Lambda que viene del archivo jar necesita sus interfaces en el classpath para ser compilado, las interfaces desconocidas son java.util.function.Consumer