Можете ли вы центрировать кнопку в RelativeLayout? - PullRequest
160 голосов
/ 20 сентября 2010

Я пытаюсь отцентрировать кнопку в относительном расположении, это возможно?Я пробовал функции гравитации и ориентации, но они ничего не делают.

Ответы [ 10 ]

347 голосов
/ 20 сентября 2010

Попробуйте

android:layout_centerHorizontal="true"

Точно так же, это работает для меня:

<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>
99 голосов
/ 20 сентября 2010

Вы можете использовать CENTER_IN_PARENT для относительного расположения.

Добавить android:layout_centerInParent="true" к элементу, который вы хотите центрировать в RelativeLayout

35 голосов
/ 20 сентября 2010

Аркадия, просто попробуйте код ниже. Есть несколько способов получить результат, который вы ищете, это один из самых простых способов.

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

Установка силы тяжести самого RelativeLayout повлияет на все объекты, размещенные внутри него. В данном случае это просто кнопка. Конечно, вы можете использовать здесь любые настройки гравитации (например, center_horizontally, top, right и т. Д.).

Вы также можете использовать этот код ниже:

<?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>
20 голосов
/ 21 сентября 2016

Обобщенная

Добавление:

android:layout_centerInParent="true"

работает только с RelativeLayout, если для представления также установлен один из следующих атрибутов:

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

, который выравнивает дочерний вид к родительскому. «Центр» основан на выбранной вами оси выравнивания:

влево / вправо -> по вертикали

верх / низ -> горизонтальный

Установка тяжести childs / content внутри вида:

android:gravity="center"

центрирует дочерний элемент в родительском представлении в любом случае, если не установлено выравнивание. Дополнительно вы можете выбрать:

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

Тогда есть:

android:layout_gravity="center"

, который центрирует само представление внутри своего родителя

И, наконец, вы можете добавить следующий атрибут в представление родителей:

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
7 голосов
/ 19 июля 2016

Используйте атрибут android:centerInParent="true" внутри вида, когда вы хотите центрировать вид в Относительном макете.

<?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 голосов
/ 05 марта 2015

Легко, не выравнивайте его по чему-либо

<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 голосов
/ 22 июля 2015

Для выравнивания по центру в одном из направлений используйте android: layout_centerHor horizontal = "true" или android: layout_centerVertical = "true" в дочернем макете

1 голос
/ 07 августа 2017

Это действительно легко.Попробуйте код ниже,

<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 голос
/ 20 апреля 2015

Удаление любого выравнивания, например, android: layout_alignParentStart = "true" и добавление centerInParent работало для меня. Если «выравнивание» остается, centerInParent не работает

0 голосов
/ 14 августа 2016

Вы должны выровнять его слева или справа от родительского представления

не используйте ни один из них при использовании android:centerInParent="true" кодов: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...