layout_below - relativelayout android studio español
Diseño relativo de Android alignCenter desde otra vista (5)
A veces, puede establecer alignLeft
y alignRight
en la vista deseada y luego usar la gravedad en el elemento que desea centrar.
Por ejemplo:
android:layout_below="@+id/firstLayout"
android:layout_alignLeft="@+id/firstLayout"
android:layout_aligntRight="@+id/firstLayout"
android:gravity="center"
Si el componente no es un TextView
(o una vista donde no necesita el fondo), podría envolverlo en un FrameLayout
con las propiedades anteriores.
<MyView id="@+id/firstLayout" .. other props/>
<FrameLayout
... other props
android:layout_below="@+id/firstLayout"
android:layout_alignLeft="@+id/firstLayout"
android:layout_aligntRight="@+id/firstLayout"
android:gravity="center" >
<MyView id="@+id/myAlignedView" ..other props />
</FrameLayout>
De esta manera, la vista inferior será un Marco con el mismo ancho que el superior, pero en su interior habrá una vista centrada en el ancho.
Por supuesto, esto solo funciona cuando sabes cuál es la vista más grande. Si no, como respondió Laranjeiro, envuelva ambos contenidos en otro diseño con gravedad centrada.
Tengo un diseño relativo con dos hijos que también son RelativeLayouts que contienen algunos botones y cosas. Estos diseños de niños no están centrados en mi diseño principal, y el diseño principal contiene algunas otras cosas fuera de los lados de estos dos. Quiero que el primero esté encima del segundo. Eso es bastante fácil, solo usa android:layout_below="@+id/firstLayout"
en el segundo. Pero también quiero que el segundo se alinee en el centro del primero. Con eso quiero decir que quiero que el segundo diseño encuentre el centro del primero y se alinee para que su centro esté en la misma posición x. Veo alignLeft, alignRight, alignTop, y alignBaseline, pero ningún centro. ¿Es posible hacer esto sin tener que codificar un margen para deslizar el segundo diseño sobre algunos?
Aquí hay un ejemplo aproximado de lo que estoy tratando de lograr, la barra azul sería el primer diseño y la caja roja sería el segundo diseño. Sé que podría envolverlos en otro diseño relativo que tenga tamaños iguales a "wrap_content" y luego usar centerHorizontal = "true" para el segundo. Pero realmente preferiría dejar a ambos como hijos de mi diseño principal (tendría que hacer algunos cambios en la forma en que funcionan ciertas partes de mi aplicación si los hago hijos de un diseño diferente. Lo cual trato de evitar).
La única solución que me funcionó fue envolver ambos componentes en un FrameLayout con la dimensión del componente más grande y establecer el segundo componente en el centro del FrameLayout usando la propiedad
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/red_component"
android:layout_width="100dp"
android:layout_height="100dp"/>
<View
android:id="@+id/blue_component"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center" />
</FrameLayout>
Para los textos que he estado usando esta fe para una alineación de centro vertical:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_alignTop="@id/theBigOne"
android:layout_alignBottom="@id/theBigOne"
android:layout_toRightOf="@id/theBigOne"
Sólo establece como esto:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/bottomHolder"
android:layout_alignParentTop="true"
android:layout_centerInParent = "true"/>
<View
android:id="@+id/bottomHolder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
Si puede establecer el ancho del diseño principal en "wrap_content", puede poner ambos diseños secundarios en el centro