Центрировать кнопку в линейном макете - PullRequest
320 голосов
/ 24 декабря 2009

Я использую линейную раскладку для отображения довольно светлого начального экрана. Он имеет 1 кнопку, которая должна центрироваться на экране как горизонтально, так и вертикально. Однако независимо от того, что я пытаюсь сделать, кнопка будет выравнивать центр сверху. Я включил XML ниже, кто-нибудь может указать мне правильное направление?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageButton android:id="@+id/btnFindMe" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        android:background="@drawable/findme"></ImageButton>

</LinearLayout>

Ответы [ 18 ]

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

Центр с использованием LinearLayout:

<LinearLayout
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/btnFindMe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/findme" />
</LinearLayout>
360 голосов
/ 24 декабря 2009

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

Используйте взамен RelativeLayout.

Так что замените:

android:layout_gravity="center_vertical|center_horizontal"

для соответствующей опции RelativeLayout:

android:layout_centerInParent="true"

Итак, ваш файл макета будет выглядеть так:

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

    <ImageButton android:id="@+id/btnFindMe" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/findme"></ImageButton>

</RelativeLayout>
40 голосов
/ 24 декабря 2009

Вы пытались определить android:gravity="center_vertical|center_horizontal" внутри макета и установить android:layout_weight="1" на изображении?

34 голосов
/ 20 октября 2011

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

android:layout_gravity="center"

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

android:layout_gravity="center_vertical|center_horizontal"
9 голосов
/ 27 сентября 2016

Добавить

android:gravity="center"

В LinearLayout.

7 голосов
/ 24 марта 2014

легко с этим

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:visibility="visible" 
        android:gravity="center"
        android:orientation="vertical" >

        <ProgressBar
            android:id="@+id/pbEndTrip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:text="Gettings" />
    </LinearLayout>
5 голосов
/ 12 декабря 2015
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageButton android:id="@+id/btnFindMe" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:layout_gravity = "center"
        android:background="@drawable/findme">
    </ImageButton>

</LinearLayout>

Приведенный выше код будет работать.

5 голосов
/ 08 июня 2012

Вы можете использовать RelativeLayout.

2 голосов
/ 05 мая 2018

Если вы используете LinearLayout, вы можете добавить центр тяжести:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">
            <Button
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            />
</LinearLayout>`
2 голосов
/ 28 марта 2016

Согласно документации Android для атрибутов XML android: layout_gravity , мы можем сделать это легко:)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageButton android:id="@+id/btnFindMe" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"

        android:layout_gravity="center"

        android:background="@drawable/findme"></ImageButton>

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