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

时间:2011-01-09 11:12:31

标签: android android-relativelayout android-layoutparams

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

 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"属性?

4 个答案:

答案 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)

  1. 你需要创建和id 你需要参考的按钮: btn1.setId(1);
  2. 你可以使用params变量来 为您的布局添加参数,i 认为方法是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)