Чи можете ви відцентрувати кнопку в RelativeLayout?


174

Я намагаюся відцентрувати кнопку у відносному макеті, чи це можливо? Я спробував гравітацію та орієнтацію, але вони нічого не роблять.


1
Мова? Рамка? ОС?
Арнольд Спенс

3
@Arnold Spence: ти побив мене на 24 секунди :)
Nippysaurus

3
Вибачте, вперше я використовую переповнення стека. Так, я розробляю для Android. =)
Аркадія

7
Без проблем. Правильні теги швидше привернуть увагу правого попсела. Виправлено :)
Арнольд Спенс

8
+1 Арнольду Спенсу за уважність. Деякі люди на SO мали б словесно знищити ОП за те, що вони просто "нові".
Subby

Відповіді:


370

Спробуйте

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>

5
Я не працюю, якщо ви маєте match_parent для своєї ширини.
Ghoti

2
Якщо ви маєте match_parent для своєї ширини, він уже орієнтований по горизонталі.
ataulm

103

Ви можете використовувати CENTER_IN_PARENT для відносного макета.

Додайте android:layout_centerInParent="true"до елемента, який ви хочете відцентрувати у RelativeLayout


Це центри горизонтально та вертикально, як 'bout layout_centerHorizontal = true
user3076750

37

Аркадія, просто спробуйте код нижче. Існує кілька способів отримати результат, який ви шукаєте, це один із найпростіших способів.

<?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 вплине на всі об'єкти, розміщені всередині нього. У цьому випадку це просто кнопка. Тут, звичайно, ви можете використовувати будь-які налаштування сили тяжіння (наприклад, центр_горизонталь, верх, право тощо).

Ви також можете використовувати цей код нижче:

<?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
Дякую. Однак, якщо у мене було кілька кнопок і хотілося лише одного по центру, як би це зробити? Перший код буде зосереджувати все, що знаходиться у батьківському відносномупрограмі. Крім того, як я міг відцентрувати кнопку вгорі рядка?
Аркадія

Просто використовуйте другий приклад і додайте лише центрInParent до кнопки, яку ви хочете по центру. Ви також можете використовувати centerHorizontal та layout_alignParentTop, щоб вирівняти його вгорі та відрегулювати його по горизонталі. Що саме ви намагаєтесь досягти, я можу дати кращий приклад.
Кевін Коппок

Я ледве починаю свої дослідження з розвитку андроїдів і намагаюся повністю зрозуміти, як маніпулювати речами, щоб робити те, що я хочу. В основному я хочу триматися подалі від вирівнювання речей із пікселями, оскільки зображення може виглядати зовсім по-різному в іншому типі / роздільній здатності екрана. Однак, коли ви використовуєте команду гравітації, все слідує за нею. Я спробував відключити гравітацію для кнопки за допомогою ignoreGravity, і це не спрацювало. Цей матеріал дуже складний.
Аркадія

Так, це точно може бути. Існує маса способів зробити будь-який конкретний макет. Найкращий спосіб - сортувати замальовку в голові, як ви цього хочете, і піти звідти. Цей короткий підручник може допомогти і деяким: developer.android.com/resources/tutorials/views/…
Кевін Коппок

Так, я насправді робив цей підручник. Я переглядаю кожен навчальний посібник і вчуся, як повною мірою ними маніпулювати, інакше я не зрозумію, наскільки кожен з них різний.
Аркадія

25

Узагальнено

Додавання:

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"

що вирівнює дочірній погляд до батьківського подання. "Центр" базується на вибраній вами відчуження:

зліва / справа -> вертикаль

вгорі / внизу -> горизонтально

Встановлення тяжкості дітей / вмісту всередині перегляду:

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

Використовуйте атрибут 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

Це легко, не вирівнюйте його ні до чого

<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

Для центрального вирівнювання в одному з напрямків використовуйте android: layout_centerHorizontal = "true" або android: layout_centerVertical = "true" у дочірньому макеті


1

Видалення будь-якого вирівнювання, як android: layout_alignParentStart = "true" і додавання centerInParent працювало на мене. Якщо функція "вирівнювання" залишається, центрInParent не працює


1

Це дійсно просто. Спробуйте код нижче,

<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
Тут не вітаються лише відповіді з кодом. Спробуйте опублікувати більше подробиць, чому вищезгадана відповідь буде працювати. :)
Vivz

Дякуємо за керівництво. Я тут новий.
Примеш

0

ви повинні вирівняти його зліва або справа від батьківського подання

не використовуйте жодного з них під час використання android:centerInParent="true"кодів: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.