繁体   English   中英

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

[英]How to programmatically set the layout_align_parent_right attribute of a Button in Relative Layout?

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

 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 " 或android:layout_toLeftOf="@id/btn"属性,就像我们在 Z0F635D0E0F382E6FFF78A 中所做的那样

您可以使用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
  1. 您需要为需要引用的按钮创建和标识: btn1.setId(1);
  2. 您可以使用 params 变量向您的布局添加参数,我认为该方法是addRule() ,请查看此LayoutParams对象的 android java 文档。

要添加值为 true 或 false 的RelativeLayout属性,请为 false 使用0为 true 使用RelativeLayout.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)

Kotlin 中:

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

params.addRule(RelativeLayout.ALIGN_PARENT_END)

mBinding.tvTotalAmount.layoutParams = 参数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM