215

在运行时创建RelativeLayout时是否有可能以编程方式设置等价物android:layout_below

4

4 回答 4

480

是的:

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你想要拥有这些参数的视图。

于 2010-07-18T21:20:29.687 回答
153

或者,您可以使用视图当前布局参数并修改它们:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewToLayout.getLayoutParams();
params.addRule(RelativeLayout.BELOW, R.id.below_id);
于 2014-02-11T15:22:14.443 回答
12

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

((RelativeLayout.LayoutParams) viewToLayout.getLayoutParams()).addRule(RelativeLayout.BELOW, R.id.below_id);
于 2017-11-07T11:42:16.733 回答
3

带有中缀功能的Kotlin版本

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

然后你可以写:

view1 below view2

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

view1.below(view2)
于 2020-04-28T21:00:09.810 回答