layout_gravity in LinearLayout

21

这是我的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

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

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_marginLeft="5dip" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textColor="#ffffff" >
        </TextView>
    </LinearLayout>

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

        <Button
            android:id="@+id/nazajGumb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/roaming_backbtn" >
        </Button>

        <Button
            android:id="@+id/homeBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:text="@string/roaming_homebtn" >
        </Button>
    </LinearLayout>

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dip"
        android:prompt="@string/roaming_spinnerPrompt" />

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Random text"
        android:textColor="#ffffcc" />

    <Button
        android:id="@+id/testBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="test" >
    </Button>
</LinearLayout>

在LinearLayout2中ImageView和TextView的位置以及在LinearLayout3中按钮的位置(使用layout gravity)没有起作用。

我错过了什么吗?


1
什么意思不工作?像它们都是左对齐的吗? - chustar
是的,它们都是左对齐的。 - DixieFlatline
1
如果您将LinearLayout的方向设置为“水平”,则重力左侧或右侧无法工作。将其设置为垂直方向将使此操作成为可能。我只是不确定您在这里想要实现什么... - Boy
3个回答

66

android:layout_gravity并不是这样工作的。只有在android:orientationvertical时,leftcenter_horizontal参数才会生效。为了实现您想要的效果,最好使用RelativeLayout

  <RelativeLayout
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">

        <ImageView   
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="5dip"/>

        <TextView 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"  
        android:layout_centerHorizontal="true"
        android:textColor="#ffffff"/>
  </RelativeLayout>    

谢谢。这是一个 bug 还是规则,即在线性布局的水平方向上不能使用左/中心水平? - DixieFlatline
12
这不是一个漏洞,只是一个功能。 - Cristian
10
RelativeLayout 中,我认为你不需要使用 android:orientation 属性。 - DroidDev

0

在@Cristian的答案中,还可以通过广泛使用属性“weight”和“weight_sum”(虽然更繁琐)来使用线性布局实现相同的功能。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_margin="1dp"
    tools:context=".MainActivity"
    android:weightSum="5"
    android:padding="10dp"
    android:id="@+id/parent_linear_layout">

    <!-- Sub #1 Linear Layout #1 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:weightSum="5"
        android:id="@+id/sub_1_linear_layout_1">

        <!-- Sub #2 Linear Layout #1 -->
        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="1"
            android:id="@+id/sub_2_linear_layout_1">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginLeft="5dp"
                android:src="@drawable/stack_overflow"/>

        </LinearLayout>

        <!-- Sub #2 Linear Layout #2 -->
        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="1"
            android:id="@+id/sub_2_linear_layout_2">

        </LinearLayout>

        <!-- Sub #2 Linear Layout #3 -->
        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:gravity="center"
            android:layout_weight="1"
            android:id="@+id/sub_2_linear_layout_3">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="@string/stack_overflow"
                android:textColor="#111111"/>

        </LinearLayout>

        <!-- Sub #2 Linear Layout #4 -->
        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="1"
            android:id="@+id/sub_2_linear_layout_4">

        </LinearLayout>

        <!-- Sub #2 Linear Layout #5 -->
        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="1"
            android:id="@+id/sub_2_linear_layout_5">

        </LinearLayout>

    </LinearLayout>

    <!-- Sub #1 Linear Layout #2 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:weightSum="5"
        android:id="@+id/sub_1_linear_layout_2">

        <!-- Sub #2 Linear Layout #1 -->
        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="1"
            android:id="@+id/sub_2_linear_layout_1_2">

        </LinearLayout>

        <!-- Sub #2 Linear Layout #2 -->
        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="1"
            android:id="@+id/sub_2_linear_layout_2_2">

        </LinearLayout>

        <!-- Sub #2 Linear Layout #3 -->
        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:gravity="center"
            android:layout_weight="1"
            android:id="@+id/sub_2_linear_layout_3_2">

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

        </LinearLayout>

        <!-- Sub #2 Linear Layout #4 -->
        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="1"
            android:id="@+id/sub_2_linear_layout_4_2">

        </LinearLayout>

        <!-- Sub #2 Linear Layout #5 -->
        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:gravity="center"
            android:layout_weight="1"
            android:id="@+id/sub_2_linear_layout_5_2">

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

        </LinearLayout>

    </LinearLayout>

    <!-- Sub #1 Linear Layout #3 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_weight="1"
        android:id="@+id/sub_1_linear_layout_3">

        <Spinner
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:prompt="@string/random_prompt"/>

    </LinearLayout>

    <!-- Sub #1 Linear Layout #4 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_weight="1"
        android:id="@+id/sub_1_linear_layout_4">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#111111"
            android:text="@string/random_text"/>

    </LinearLayout>

    <!-- Sub #1 Linear Layout #5 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_weight="1"
        android:id="@+id/sub_1_linear_layout_5">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#111111"
            android:text="@string/test_button"/>

    </LinearLayout>

</LinearLayout>

注意:自API 8以来,“fill_parent”已被弃用,而改用“match_parent”。请参见-match_parent和fill_parent有什么区别?


-21
android:layout_marginLeft="5dip"

应该是 dp 而不是 dip

android:layout_marginLeft="5dp"

11
它们实际上是等价的,但这并不能解决问题。 - Cristian
2
事实上,有报道称,尽管文档表明它们是相同的,但dp有时无法正常工作,而dip可以正常工作。 - Zulaxia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接