Android layout_below无效

时间:2012-02-19 18:38:56

标签: android

我在我的应用程序中广泛使用RelativeLayouts,并认为我知道如何指定它们,但这让我感到茫然。我基本上将4个TextView放在两行,每行两行,每行包含一个标签和将要提供的文本。它应该看起来像:

出生:1810年8月23日,肯塔基州梅森公司

死了:1865年7月15日辛辛那提,汉密尔顿公司,俄亥俄州

这是布局的相关部分:

        <TextView android:id="@+id/birth_lbl"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/given_layout"
            android:layout_alignLeft="@+id/given_layout"
            android:layout_marginTop="6dip"
            style="@style/label"
            android:text="@string/born"
        />
        <TextView android:id="@+id/birth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/birth_lbl"
            android:layout_alignBaseline="@+id/birth_lbl"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="6dip"
            style="@style/main_text"
            android:text="dd Mmm yy"
        />
        <TextView android:id="@+id/death_lbl"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/birth"
            android:layout_alignLeft="@+id/birth_lbl"
            android:layout_marginTop="4dip"
            style="@style/label"
            android:text="@string/died"
        />
        <TextView android:id="@+id/death"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/death_lbl"
            android:layout_alignLeft="@+id/birth"
            android:layout_alignBaseline="@+id/death_lbl"
            android:layout_marginRight="6dip"
            style="@style/main_text"
            android:text="dd Mmm yy"
        />

由于某种原因,这显示出生线视图的死亡线视图!如果我将death_lbl视图的规格更改为'layout_below =“@ + id / birth_lbl”',则行正确定位!但是,“出生”视图可能会换行到多行,所以我真的需要将第二行放在“出生”之下,而不是“birth_lbl”。

有人知道这种行为的原因吗?它出现在Eclipse的Graphical Layout编辑器和运行Android 4.0的平板电脑的运行时。

5 个答案:

答案 0 :(得分:16)

尝试将android:layout_below="@+id/birth"中的death_lbl更改为android:layout_below="@id/birth",因为此时它已经被声明,+暗示,它可能会在再次声明时导致问题

答案 1 :(得分:6)

我也遇到了同样的问题,因为我使用的是约束布局,但 align_below 仅适用于相对布局。所以检查你正在使用哪种布局。

答案 2 :(得分:1)

如果修复+符号无效,您可以始终将id/death置于id/birth下方,然后将id/death_label置于左id/death。< / p>

答案 3 :(得分:1)

我实际上能够通过仅使用那些字段编写临时layout来复制此现象,并且如果我没有将初始birth_lbl视图定位为相对的,则能够确定问题消失了到它上面的视图(在这种情况下为“given_layout”)。

所以我不确定这是否被归类为修复,变通方法或者kludge(这些日子仍然是一个词?),但我所做的是将文本视图放在他们自己的{{1相对于RelativeLayout定位RelativeLayout。无论如何,它都有效......

答案 4 :(得分:0)

您的问题是您在相对布局上调用属性,就好像您再次声明它一样。

当您为视图声明ID时,应该像这样android:id="@+id/button" 当您希望Android将该特定视图定位在相对布局中任何其他视图的上方或下方时,您必须将其称为android:layout_below="@id/textview"

这告诉android你宣布了一个带有id按钮的按钮,并希望它位于textview下面,请记住不要使用@+id来定位视图使用@id