在线性布局中将按钮居中

Centering a button in a linear layout

在 LinearLayout 上使用重力使按钮正确居中:

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center">

        <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/new"
        android:paddingLeft="40dp"
        android:paddingRight="40dp"/>
    </LinearLayout>

但是在 Button 上使用 layout_gravity=center 只会使按钮水平居中而不是垂直居中,为什么?

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TEST"
            android:paddingLeft="40dp"
            android:paddingRight="40dp"
            android:layout_gravity="center"/>
        </LinearLayout>

我认为 layout_gravity 可以使按钮在 LinearLayout 中居中。
有帮助的文章:LinearLayout gravity and layout_gravity explained
检查下面的简单代码。它会给你一个按钮 center horizo​​ntal of LinearLayout

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#f00"
        android:orientation="vertical" >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Button Center Hozizontal" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#00f"
        android:orientation="horizontal" >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Button Center Vertical" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#0ff"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:orientation="vertical" >

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="Button Center Vertical/ Horizontal" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

希望对您有所帮助。

gravity定义在ViewGroup中(只有ViewGroup及其子类有此属性)。而layout_gravity定义在View.

layout_gravity 更改视图的引力,到目前为止一切顺利。但是,如果您将 gravity 应用于 ViewGroup,例如 LinearLayout,视图 内部 视图组会改变引力。

也就是说,设置ViewGroupgravity等同于设置layout_gravity到它的所有视图!

粗体字肯定回答了你的问题。

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

     <Button android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/b1"
         android:text="COLOR"/>

        </LinearLayout>