我在我的应用程序中广泛使用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的平板电脑的运行时。
答案 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
。