¿Puedes centrar un botón en RelativeLayout?

174

Estoy tratando de centrar un botón en un diseño relativo, ¿es esto posible? He probado las funciones de gravedad y orientación, pero no hacen nada.

Arcadia
fuente
1
¿Idioma? ¿Marco de referencia? OS?
Arnold Spence
3
@Arnold Spence: me ganaste por 24 segundos :)
Nippysaurus
3
Lo siento, esta es la primera vez que uso Stack Overflow. Sí, estoy desarrollando para Android. =)
Arcadia
77
No hay problema. Las etiquetas correctas llamarán la atención de la gente correcta más rápido. Solucionado :)
Arnold Spence
8
+1 a Arnold Spence por ser considerado. Algunas personas en SO habrían destruido verbalmente el OP por solo ser "nuevos".
Subby

Respuestas:

370

Tratar

android:layout_centerHorizontal="true"

Exactamente así, funciona para mí:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#ff0000">

    <Button
        android:id="@+id/btn_mybutton"
        android:layout_height="wrap_content"
        android:layout_width="124dip"
        android:layout_marginTop="5dip"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>
SombraDios
fuente
55
No funciona si tienes match_parent para tu ancho.
Ghoti
2
Si tiene match_parent para su ancho, ya está centrado horizontalmente.
ataulm
103

Puede usar CENTER_IN_PARENT para el diseño relativo.

Agregue android:layout_centerInParent="true"al elemento que desea centrar en RelativeLayout

Josnidhin
fuente
Eso se centra horizontal y verticalmente, ¿qué tal 'layout_centerHorizontal = true
user3076750
37

Arcadia, solo prueba el siguiente código. Hay varias formas de obtener el resultado que está buscando, esta es una de las formas más fáciles.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:gravity="center">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"/>
</RelativeLayout>

Establecer la gravedad del RelativeLayout afectará a todos los objetos colocados dentro de él. En este caso, es solo el botón. Puede usar cualquiera de las configuraciones de gravedad aquí, por supuesto (por ejemplo, centro_horizontal, superior, derecha, etc.).

También puede usar este código a continuación:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"
        android:layout_centerInParent="true"/>
</RelativeLayout>
Kevin Coppock
fuente
1
Gracias. Sin embargo, si tuviera varios botones y solo quisiera uno centrado, ¿cómo lo haría? El primer código centraría todo dentro de la distribución relativa relativa. Además, ¿cómo podría centrar el botón en la parte superior de su fila?
Arcadia
Solo use el segundo ejemplo y solo agregue centerInParent al botón que desea centrar. También puede usar centerHorizontal y layout_alignParentTop para alinearlo en la parte superior y centrarlo horizontalmente. ¿Qué es exactamente lo que está tratando de lograr? Podría dar un mejor ejemplo.
Kevin Coppock
Apenas comienzo mis estudios de desarrollo de Android y trato de entender completamente cómo manipular las cosas para hacer lo que quiero. Básicamente quiero evitar alinear cosas con píxeles porque la imagen podría verse muy diferente en un tipo / resolución de pantalla diferente. Sin embargo, cuando usa el comando de gravedad, todo lo sigue. Intenté desactivar la gravedad para un botón usando ignoreGravity y no funcionó. Esto es muy complicado.
Arcadia
Sí, definitivamente puede ser. Hay muchas maneras de hacer un diseño en particular. La mejor manera es hacer un bosquejo en tu cabeza como lo desees, e ir desde allí. Este tutorial rápido también puede ser útil: developer.android.com/resources/tutorials/views/…
Kevin Coppock
Sí, en realidad estaba haciendo ese tutorial. Estoy revisando cada uno de los tutoriales y aprendiendo a manipularlos por completo, de lo contrario no tendré una idea de cómo cada uno es diferente.
Arcadia
25

Resumido

Agregando:

android:layout_centerInParent="true"

solo funciona en RelativeLayout, si uno de los siguientes atributos también está configurado para la vista:

android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"

que alinea la vista secundaria a la vista primaria. El "centro" se basa en el eje de la alineación que ha elegido:

izquierda / derecha -> vertical

arriba / abajo -> horizontal

Establecer la gravedad del niño / contenido dentro de la vista:

android:gravity="center"

está centrando al niño dentro de la vista padre en cualquier caso, si no hay un conjunto de alineación. Opcional puedes elegir:

<!-- Axis to Center -->
android:gravity="center_horizontal"
android:gravity="center_vertical"

<!-- Alignment to set-->
android:gravity="top"
android:gravity="bottom"
android:gravity="left"
android:gravity="right"
android:gravity="fill"
...

Entonces hay:

android:layout_gravity="center"

que está centrando la vista dentro de su padre

Y finalmente puede agregar el siguiente atributo a la vista de los padres:

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
Spektakulatius
fuente
7

Utilice el atributo android:centerInParent="true"dentro de una vista, cuando desee centrar la vista en Diseño relativo.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NWE"
        android:textSize="30dp"/>
</RelativeLayout>
KarthikKPN
fuente
5

Es fácil, no lo alinees con nada

<Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true"
        android:text="Centered Button"/>

Sheychan
fuente
2

Para centrar la alineación en una de las direcciones, use android: layout_centerHorizontal = "true" o android: layout_centerVertical = "true" en el diseño secundario

karma
fuente
1

Eliminar cualquier alineación como android: layout_alignParentStart = "true" y agregar centerInParent funcionó para mí. Si el "alinear" permanece, el centerInParent no funciona

al881
fuente
1

Es muy fácil Prueba el siguiente código,

<RelativeLayout
    android:id="@+id/second_RL"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/first_RL"
    android:background="@android:color/holo_blue_bright"
    android:gravity="center">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</RelativeLayout>
Primesh
fuente
1
Las respuestas de solo código no son bienvenidas aquí. Intente publicar más detalles sobre por qué funcionará la respuesta anterior. :)
Vivz
Gracias por la pauta. Soy nuevo aquí.
Primesh
0

debe haberlo alineado a izquierda o derecha de la vista principal

no use ninguno de estos cuando use android:centerInParent="true"códigos: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

etc.

Divy sindhu
fuente