Отцентрируйте две кнопки горизонтально - PullRequest
47 голосов
/ 16 ноября 2010

Я стараюсь расположить две кнопки (с изображениями на них, которые отлично работают) рядом друг с другом и расположить их горизонтально.Вот что у меня есть:

<LinearLayout android:orientation="horizontal" android:layout_below="@id/radioGroup"
              android:layout_width="wrap_content" android:layout_height="wrap_content"
              android:layout_gravity="center_horizontal|center">
    <Button
            android:id="@+id/allow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/radioGroup"
            android:layout_gravity="center_horizontal"
            android:drawableLeft="@drawable/accept_btn"
            android:text="Allow"/>
    <Button
            android:id="@+id/deny"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/allow"
            android:layout_below="@id/radioGroup"
            android:layout_gravity="center_horizontal"
            android:drawableLeft="@drawable/block_btn"
            android:text="Deny"/>
</LinearLayout>

К сожалению, они все еще выровнены по левой стороне.Любая помощь приветствуется!Ив

Редактировать :

К сожалению, ни один из комментариев или предложений пока не работает.Вот почему я пытаюсь предоставить упрощенный полный макет теперь с RelativeLayout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:layout_centerHorizontal="true">
    <TextView android:text="@+id/TextView01" android:id="@+id/TextView01"
          android:layout_width="wrap_content" android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/allow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/TextView01"
        android:text="Allow"/>
    <Button
        android:id="@+id/deny"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/allow"
        android:layout_alignTop="@id/allow"
        android:text="Deny"/>
</RelativeLayout>

Я безуспешно пробовал все комбинации атрибутов в LinearLayout и элементах Button.Есть другие идеи?

Ответы [ 18 ]

95 голосов
/ 16 ноября 2010

Это мое решение:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_centerHorizontal="true">

    <TextView
        android:text="@+id/SomeText"
        android:id="@+id/TextView01"
        android:layout_width="wrap_content" android:layout_height="wrap_content" />

    <LinearLayout
        android:orientation="horizontal"
        android:background="@android:drawable/bottom_bar"
        android:paddingLeft="4.0dip"
        android:paddingTop="5.0dip"
        android:paddingRight="4.0dip"
        android:paddingBottom="1.0dip"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:layout_below="@+id/TextView01">

        <Button
            android:id="@+id/allow"
            android:layout_width="0.0dip" android:layout_height="fill_parent"
            android:text="Allow"
            android:layout_weight="1.0" />

        <Button
            android:id="@+id/deny"
            android:layout_width="0.0dip" android:layout_height="fill_parent"
            android:text="Deny"
            android:layout_weight="1.0" />

    </LinearLayout>
</RelativeLayout>
30 голосов
/ 07 февраля 2011

Я знаю, что вы уже нашли решение, но вы также можете найти это полезным.Пустой TextView, используемый в качестве центральной ссылки, может удваиваться в качестве отступа между кнопками, увеличивая настройку наклона.Он также хорошо обрабатывает изменения ориентации экрана.

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button1"
        android:text="Left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/centerPoint" />

    <TextView
        android:id="@+id/centerPoint"
        android:text=""
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" />

    <Button
        android:id="@+id/button2"
        android:text="Right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@+id/centerPoint" />

</RelativeLayout>

Снимок экрана с результатом:

screen shot of the result

15 голосов
/ 26 января 2011

Я не знаю, нашел ли ты когда-нибудь хороший ответ на этот вопрос, но я достиг его, сделав TableRow, установив ширину fill_parent и установив центр тяжести, а затем поместив две кнопки внутри него.1002 *

6 голосов
/ 05 января 2012

Если вы ищете быстрое решение RelativeLayout полностью, следующее хорошо работает.Фиктивный элемент View невидим и центрирован по горизонтали.Обе кнопки расположены влево или вправо.

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.be.android.stopwatch"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal">

<View android:id="@+id/dummy"  android:visibility="visible" android:layout_height="0dip" android:layout_width="1dip" android:background="#FFFFFF" android:layout_centerHorizontal="true"/>

<ImageButton android:id="@+id/button1" android:layout_height="25dip" android:layout_alignTop="@+id/dummy" android:layout_toLeftOf="@+id/dummy" android:layout_width="50dip"/>

<ImageButton android:id="@+id/button2" android:layout_height="25dip" android:layout_alignTop="@+id/dummy"  android:layout_toRightOf="@+id/dummy"   android:layout_width="50dip"/>

</RelativeLayout>
5 голосов
/ 11 ноября 2012

Я центрую две кнопки следующим образом:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical" >
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/one" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical" >
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/two" />
    </LinearLayout>
</LinearLayout>
4 голосов
/ 16 ноября 2010

Атрибуты с именем android:layout_foo являются LayoutParams - аргументами родителя представления. Попробуйте установить android:gravity="center" на LinearLayout вместо android:layout_gravity. Один из них влияет на то, как LinearLayout будет размещать своих потомков внутри себя, а другой - на то, как родитель LinearLayout должен относиться к нему. Вы хотите первое.

3 голосов
/ 06 июня 2012

Я обернул два горизонтальных LinearLayout следующим образом:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:gravity="center"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

ваши виджеты UI здесь

</LinearLayout> </LinearLayout>
3 голосов
/ 06 августа 2013

Используйте макет Релати вместо линейного и установите гравитацию как android: gravity = "center" .

Относительные макеты дают лучшую производительность и масштабирование лучше, если вы запускаете приложение для устройств разных размеров.

В качестве примера приведен XML-код и полученный интерфейс:

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="@Color/custom1"
        android:gravity="center" >

        <TextView
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:background="@color/Red"
            android:gravity="center"
            android:layout_marginRight="80dp"
            android:text="Text11111" />

        <TextView
            android:id="@+id/tv2"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_toRightOf="@id/tv1"
            android:background="@color/Yellow"
            android:gravity="center"
            android:text="Text22222" />
    </RelativeLayout>

enter image description here

3 голосов
/ 09 июля 2012

Это кажется очень старым вопросом, но у меня тоже была такая же проблема. Мне пришлось разместить две кнопки рядом друг с другом в середине экрана (по горизонтали). В итоге я поместил две кнопки в линейный макет и поместил линейный макет в относительный макет с гравитацией в центре.


ОБНОВЛЕНИЕ: я нашел еще более простое решение:

<LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content"
              android:layout_centerHorizontal="true">
    <Button android:text="status" android:layout_height="wrap_content" android:layout_width="wrap_content"/>
    <Button android:text="fly" android:layout_height="wrap_content" android:layout_width="wrap_content"/>
</LinearLayout>

Вот что у меня было раньше:

    <RelativeLayout android:layout_height="wrap_content" android:layout_width="match_parent"
                    android:id="@+id/actionButtons" android:layout_below="@id/tripInfo" android:gravity="center">

        <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content">
            <Button android:text="status" android:layout_height="wrap_content" android:layout_width="wrap_content" />
            <Button android:text="fly" android:layout_height="wrap_content" android:layout_width="wrap_content" />
        </LinearLayout>



    </RelativeLayout>
2 голосов
/ 30 декабря 2016

Это мое решение, использующее относительный размер:

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center">

        <Button
            android:id="@+id/reject_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/reject"/>

        <Button
            android:id="@+id/accept_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/accept"
            android:layout_toRightOf="@id/reject_btn"/>
    </RelativeLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...