layout_toLeftOf的问题

时间:2013-08-14 19:11:31

标签: android android-layout

我有以下布局文件:

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

    <TextView
            android:text="TOP"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    <RelativeLayout
            android:background="@color/azul_pressed"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        <TextView
                android:id="@+id/tv1"
                android:paddingLeft="100dp"
                android:text="|RIGHT--"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        <TextView
                android:id="@+id/tv2"
                android:layout_toLeftOf="@id/tv1"
                android:text="--LEFT|"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

    </RelativeLayout>

    <TextView
            android:text="BOTTOM"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

</LinearLayout>

产生以下输出:

enter image description here

这一行:

android:layout_toLeftOf="@id/tv1"

导致 tv2 从屏幕上消失并创建所有额外的蓝色空间。

为什么?

2 个答案:

答案 0 :(得分:0)

在相对布局中,您必须对齐,您必须将内容与父级或其他小部件对齐。

我相信这就是你要找的东西:

<TextView
        android:id="@+id/tv1"
        android:paddingLeft="100dp"
        android:text="|RIGHT--"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/tv2"/>

<TextView
        android:id="@+id/tv2"
        android:layout_alignParentLeft="true"
        android:text="--LEFT|"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

看看我如何将tv1与父母的左边对齐,然后将tv2对齐到tv1的右边。

你也可以反过来做。

答案 1 :(得分:0)

您是否将填充与保证金混淆?填充将在TextView中移动文本,并且实际上不是边界的一部分。如果你想从侧面推送它们,或者在父ViewGroup上填充(同样的事情),请使用边距。

<TextView
    android:id="@+id/tv2"
    android:layout_alignParentLeft="true"
    android:text="--LEFT|"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/tv1"
    android:text="|RIGHT--"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/tv2"/>

这会将视图放在彼此旁边。

如果您想在左侧将它们偏移100像素,请添加:

android:margin_left="100dp"到tv2。由于tv1连接到tv2的右侧,因此它将推动两个100dp。我不太确定你的意图是什么,但我认为对孩子们设置重力的LinearLayout会更好,因为两个文本视图都占据相同的空间并且均匀分布。

编辑:请注意,这与Carlos Paulino的答案类似。我认为你混淆了文本的填充偏移与布局边界。