我有一个相对布局,我正在以编程方式创建:
RelativeLayout layout = new RelativeLayout( this );
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
现在我想在这个相对布局中添加两个按钮。但问题是RelatiiveLayout左侧的两个按钮都显示在彼此之间。
buttonContainer.addView(btn1);
buttonContainer.addView(btn2);
现在我想知道如何以编程方式设置android:layout_alignParentRight="true
“
还是像我们在xml中那样使用按钮的android:layout_toLeftOf="@id/btn"
属性?
答案 0 :(得分:611)
您可以使用LayoutParams
从代码中访问任何View.getLayoutParams
。您只需要非常了解您访问的LayoutParams
。这通常是通过检查包含ViewGroup
,如果它有一个LayoutParams
内在孩子然后就是你应该使用的那个来实现的。在你的情况下它是RelativeLayout.LayoutParams
。您将使用RelativeLayout.LayoutParams#addRule(int verb)
和RelativeLayout.LayoutParams#addRule(int verb, int anchor)
您可以通过以下代码访问它:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)button.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of);
button.setLayoutParams(params); //causes layout update
答案 1 :(得分:12)
btn1.setId(1);
addRule()
,检查
出来的android java文档
LayoutParams
对象。答案 2 :(得分:4)
要添加值为true或false的"scale_both"
属性,请将RelativeLayout
用于false,将0
用于true:
RelativeLayout.TRUE
无论该属性是否已添加,您仍然使用RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams()
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE)
启用/禁用该属性。但是,在API 17之后,您可以使用addRule(verb, subject)
这只是removeRule(verb)
的快捷方式。
答案 3 :(得分:0)
科特林版本:
将这些扩展名与内插功能一起使用,可简化以后的调用
infix fun View.below(view: View) {
(this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.BELOW, view.id)
}
infix fun View.leftOf(view: View) {
(this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.LEFT_OF, view.id)
}
infix fun View.alightParentRightIs(aligned: Boolean) {
val layoutParams = this.layoutParams as? RelativeLayout.LayoutParams
if (aligned) {
(this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
} else {
(this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 0)
}
this.layoutParams = layoutParams
}
然后将它们用作infix函数调用:
view1 below view2
view1 leftOf view2
view1 alightParentRightIs true
或者您可以将它们用作常规功能:
view1.below(view2)
view1.leftOf(view2)
view1.alightParentRightIs(true)