如何在相对布局中以编程方式设置按钮的layout_align_parent_right属性?

我有一个相对的布局,我正在以编程方式创建:

 RelativeLayout layout = new RelativeLayout( this );
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);

现在我有两个按钮,我想添加到这个相对布局。但问题是两个按钮都显示在relativelayout的左边,彼此重叠。

buttonContainer.addView(btn1);
buttonContainer.addView(btn2);

现在我想知道如何以编程方式设置android:layout_alignParentRight="true" 或android:layout_toLeftOf="@id/btn"属性的按钮,因为我们在xml?< / p >

211630 次浏览
  1. 您需要创建和id 需要引用的按钮: 李btn1.setId(1); < / >
  2. 你可以使用params变量来 添加参数到你的布局,我 认为方法是addRule(),检查 拿出android Java文档来做这个 李LayoutParams对象。< / >

你可以使用View.getLayoutParams从代码中访问任何LayoutParams。你只需要非常清楚你访问的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

要添加值为true或false的RelativeLayout属性,请使用0作为false, RelativeLayout.TRUE作为true:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams()
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE)

属性是否已经添加并不重要,你仍然使用addRule(verb, subject)来启用/禁用它。然而,在api 17之后,你可以使用removeRule(verb),它只是addRule(verb, 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
}

然后将它们用作中缀函数调用:

view1 below view2
view1 leftOf view2
view1 alightParentRightIs true

或者你也可以将它们作为普通函数使用:

view1.below(view2)
view1.leftOf(view2)
view1.alightParentRightIs(true)

芬兰湾的科特林:

val params = mBinding.tvTotalAmount.layoutParams as RelativeLayout。LayoutParams

params.addRule (RelativeLayout.ALIGN_PARENT_END)

bbinding . tvtotalamount . layoutparams =参数