按钮不会倾向于线性布局的中心

时间:2014-02-12 08:46:33

标签: android xml android-layout

我有这个layout.xml,我更改了按钮的“layout_gravity”属性,但无论分配什么值,两个按钮都放在linearlayout容器的左侧。我希望它们是中心对齐的(评论是出于教学原因,但我放置它们以防它们可能成为问题):

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
xmlns:android="http://schemas.android.com/apk/res/android">
<!--root element must specify the Android resource XML namespace -->

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="24dp"
    android:text="@string/question_text"/>

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/true_button" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/false_button"
        android:layout_gravity="right" />
    <!--The XML elements :: <string name="false_button">False</string>
        will have to be defined in strings.xml-->

</LinearLayout>

3 个答案:

答案 0 :(得分:1)

尝试以下布局。我将android:gravity="center_horizontal"编辑为第二个LinearLayout

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

    <!-- root element must specify the Android resource XML namespace -->

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="24dp"
        android:text="Question" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="True" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:text="False" />
    </LinearLayout>

</LinearLayout>

<强>解释

首先LinearLayoutgravity=center。对。它将以孩子为中心。绝对正确。但第二个LinearLayout也是中心,但它又是一个持有者。所以它有自己的属性。虽然第二个布局的父布局有gravity=center,但仅适用于其直接子项。不是孩子的孩子。因此,您必须再次声明任何其他属性以适用于其子女。

答案 1 :(得分:1)

只需将android:layout_width="match_parent"更改为内部android:layout_width="wrap_content"中的LinearLayout

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="24dp"
        android:text="@string/question_text"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/false_button" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/true_button"
            android:layout_gravity="right" />

    </LinearLayout>
</LinearLayout>

答案 2 :(得分:0)

您可以使用 android:layout_weight 进行管理,如下所示......

<!-- root element must specify the Android resource XML namespace -->

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="24dp"
    android:text="@string/question_text" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2" >

    <Button
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/true_button" />

    <Button
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_weight="1"
        android:text="@string/false_button" />
    <!--
    The XML elements :: <string name="false_button">False</string>
    will have to be defined in strings.xml
    -->

</LinearLayout>