我可以在运行时以编程方式设置“android:layout_below”吗?

时间:2010-07-18 20:48:50

标签: android android-layout android-relativelayout

在运行时创建 RelativeLayout 是否可以通过编程方式设置等效的android:layout_below

4 个答案:

答案 0 :(得分:439)

是:

RelativeLayout.LayoutParams params= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.BELOW, R.id.below_id);
viewToLayout.setLayoutParams(params);

首先,代码通过指定高度和宽度来创建新的布局参数。 addRule方法正确地添加了xml的等效项android:layout_below。然后,您只需在想要拥有这些参数的视图上调用View#setLayoutParams

答案 1 :(得分:135)

或者,您可以使用视图当前布局参数并对其进行修改:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewToLayout.getLayoutParams();
params.addRule(RelativeLayout.BELOW, R.id.below_id);

答案 2 :(得分:6)

虽然@jackofallcode答案是正确的,但它可以写成一行:

((RelativeLayout.LayoutParams) viewToLayout.getLayoutParams()).addRule(RelativeLayout.BELOW, R.id.below_id);

答案 3 :(得分:1)

科特林版本,具有中缀功能

infix fun View.below(view: View) {
      (this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.BELOW, view.id)
}

然后您可以编写:

view1 below view2

或者您可以将其称为普通函数:

view1.below(view2)