Você pode centralizar um botão no RelativeLayout?


174

Estou tentando centralizar um botão no layout relativo, isso é possível? Eu tentei as funções Gravidade e Orientação, mas elas não fazem nada.


1
Língua? Estrutura? OS?
Arnold Spence

3
@Arnold Spence: você me venceu por 24 segundos :)
Nippysaurus

3
Desculpe, esta é a minha primeira vez usando o estouro de pilha. Sim, estou desenvolvendo para o Android. =)
Arcadia

7
Sem problemas. As tags corretas chamarão a atenção do povo certo mais rapidamente. Corrigido :)
Arnold Spence

8
+1 a Arnold Spence por ser atencioso. Algumas pessoas no SO teriam destruído verbalmente o OP apenas por ser "novo".
Sub23 de

Respostas:


370

Experimentar

android:layout_centerHorizontal="true"

Exatamente assim, funciona para mim:

<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>

5
Não funciona se você tiver match_parent para a sua largura.
Ghoti 14/03

2
Se você tem match_parent para sua largura, ela já está centralizada horizontalmente.
Ataulm

103

Você pode usar CENTER_IN_PARENT para o layout relativo.

Adicione android:layout_centerInParent="true"ao elemento que você deseja centralizar no RelativeLayout


Que centra-se horizontal e verticalmente, que tal layout_centerHorizontal = true
user3076750 01/07

37

Arcadia, tente o código abaixo. Existem várias maneiras de obter o resultado que você procura, e essa é uma das maneiras mais fáceis.

<?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>

Definir a gravidade do próprio RelativeLayout afetará todos os objetos colocados dentro dele. Nesse caso, é apenas o botão. Você pode usar qualquer uma das configurações de gravidade aqui, é claro (por exemplo, center_horizontal, top, right, etc.).

Você também pode usar este código abaixo:

<?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>

1
Obrigado. No entanto, se eu tivesse vários botões e quisesse apenas um centralizado, como faria isso? O primeiro código centralizaria tudo dentro do layout relativo pai. Além disso, como eu poderia centralizar o botão na parte superior da linha?
Arcádia

Basta usar o segundo exemplo e adicionar apenas centerInParent ao botão que você deseja centralizar. Você também pode usar centerHorizontal e layout_alignParentTop para alinhá-lo ao topo e centralizá-lo horizontalmente. O que exatamente você está tentando alcançar, posso dar um exemplo melhor.
precisa saber é o seguinte

Estou apenas começando meus estudos sobre desenvolvimento do Android e tentando entender completamente como manipular as coisas para fazer o que eu quero. Basicamente, quero ficar longe de alinhar as coisas com os pixels, porque a imagem pode parecer muito diferente em um tipo / resolução de tela diferente. No entanto, quando você usa o comando gravidade, tudo segue-o. Tentei desativar a gravidade de um botão usando ignoreGravity e ele não funcionou. Esse material é muito complicado.
Arcadia

Sim, definitivamente pode ser. Existem várias maneiras de fazer qualquer layout específico. A melhor maneira é esboçar na sua cabeça como você deseja e ir a partir daí. Este rápido tutorial pode ajudar alguns também: developer.android.com/resources/tutorials/views/...
Kevin Coppock

Sim, eu estava realmente fazendo esse tutorial. Estou examinando cada um dos tutoriais e aprendendo a manipulá-los completamente, caso contrário não terei uma noção de como cada um é diferente.
Arcádia

25

Resumido

Adicionando:

android:layout_centerInParent="true"

funciona apenas em RelativeLayout, se um dos seguintes atributos também estiver definido para a exibição:

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 alinha a visão filho à visão pai. O "centro" é baseado no eixo do alinhamento que você escolheu:

esquerda / direita -> vertical

superior / inferior -> horizontal

Configurando a gravidade de crianças / conteúdo dentro da visualização:

android:gravity="center"

está centralizando o filho na visualização pai em qualquer caso, se não houver um conjunto de alinhamento. Opcional, você pode escolher:

<!-- 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"
...

Então há:

android:layout_gravity="center"

que está centralizando a própria visão dentro de seu pai

E, finalmente, você pode adicionar o seguinte atributo à visualização dos pais:

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

7

Use o atributo android:centerInParent="true"dentro de uma vista, quando desejar centralizar a vista no layout 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>

5

É fácil, não alinhe a 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"/>


2

Para centralizar o alinhamento em uma das direções, use android: layout_centerHorizontal = "true" ou android: layout_centerVertical = "true" no layout filho


1

Remover qualquer alinhamento como o android: layout_alignParentStart = "true" e adicionar centerInParent funcionou para mim. Se o "alinhar" permanecer em, o centerInParent não funcionará


1

É realmente fácil. Experimente o código abaixo,

<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>

1
As respostas somente de código não são bem-vindas aqui. Tente postar mais detalhes sobre por que a resposta acima funcionará. :)
Vivz

Obrigado pela orientação. Eu sou novo aqui.
Primesh

0

você deve ter alinhado à esquerda ou à direita da visualização dos pais

não use nenhum destes itens ao usar android:centerInParent="true"códigos: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

etc.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.