我在RelativeLayout中有一个TextView(width:fill_parent),我想确保它位于它上面的两个视图之下,它们是动态宽度和高度。这意味着,有时左视图更高,有时右视图更高。
我试图设置两个“以下”参数,但当然不允许这样做。 我试图通过代码修改它(将XML设置在txt TextView下面,并将img作为它旁边的ImageView):
if (txt.getHeight() + txt.getTop() < img.getHeight() + img.getTop()) {
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
params.addRule(RelativeLayout.BELOW, R.id.image);
txtDetails.setLayoutParams(params);
}
(txtDetails是我想要在两个视图下面的那个)。
当它不起作用(没有改变)时,我将txtDetails放在它自己的RelativeLayout下面,它位于RelativeLayout下面,它包含两个视图并且有效。但是,我觉得RL应该能够处理这种情况,而无需创建新的RL。可能吗?或者,定位此视图的最佳方法是什么?
由于
答案 0 :(得分:2)
为什么不使用tablelayout?它完全符合你想要的两行。
首先在一行中添加两个变量视图,然后添加包含textview的另一行。
像这样:
<TableLayout
android:id="@+id/center"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TableRow >
<TextView
android:id="@+id/textView1"
android:layout_width="150sp"
android:layout_height="wrap_content"
android:text="@string/lorem_short" />
<TextView
android:id="@+id/textView2"
android:layout_width="150sp"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:text="@string/lorem_long" />
</TableRow>
<TableRow>
<TextView
android:id="@+id/textView3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5sp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</TableRow>
</TableLayout>
答案 1 :(得分:1)
您的代码可能存在问题:
您正在视图上调用getHeight(),如果尚未完成布局传递,则可能返回0。你应该将整个代码放在GlobalLayoutListener中,如下所示:
getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// your code here...
txt.requestLayout(); // Add this to ensure your changes are applied.
}
}
PS。您只需拨打txt.getBottom()
而不是txt.getHeight() + txt.getTop()