在运行时创建RelativeLayout时,是否可能以编程方式设置android:layout_below的等效内容?


Yes:

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。


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

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

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

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

Kotlin版本带有中缀功能

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

然后你可以这样写:

view1 below view2

或者你可以把它作为一个普通的函数来调用:

view1.below(view2)