如何以编程方式删除在XML中定义的现有规则?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

我有一个线性布局,包含在一个相对布局中。它在XML文件中设置为另一个线性布局的右侧。在某些情况下,我希望在活动的onCreate期间更改布局的相对位置,因此需要修改Param以与另一个布局相关联。我试过这个:

    RelativeLayout.LayoutParams layoutParams;

    layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove
            .getLayoutParams();
    layoutParams.addRule(RelativeLayout.RIGHT_OF,
            R.id.new_ref_LinearLayout);

但是它不起作用。

提问于
用户回答回答于

您不能删除规则,因为所有规则总是存储在一个固定大小的java数组中。但你可以设定一个规则0...例如

layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
layoutParams.addRule(RelativeLayout.BELOW, R.id.new_ref_LinearLayout);

在API级别17中,类RelativeLayout.LayoutParams有以下方法:

public void removeRule(int verb) 

因此,可以使用以下代码行删除规则:

layoutParams.removeRule(RelativeLayout.RIGHT_OF);

当“添加”零规则时,您将得到与以下结果完全相同的结果:

layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
用户回答回答于

我觉得你需要调用:

relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);

在改变了LayoutParams之后。

在回复编辑时,可以使用以下方法创建新的LayoutParameters:

LinearLayout.LayoutParams = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.FILL_PARENT,
    LinearLayout.LayoutParams.FILL_PARENT);

然后加入你的新规则。然后,使用前面提到的updateViewLayout()方法更新布局参数。

扫码关注云+社区