在运行时创建RelativeLayout时,是否可以以编程方式设置与android:layout_below
相同的属性?
在运行时创建RelativeLayout时,是否可以以编程方式设置与android:layout_below
相同的属性?
可以:
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);
LayoutParams
而不是创建新的。实际上,这应该被接受为正确答案。 - Kevin Kopf虽然 @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)