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

Android 如何以编程方式删除XML中定义的现有规则?,android,android-layout,android-relativelayout,layoutparams,Android,Android Layout,Android Relativelayout,Layoutparams,我有一个线性布局,它包含在一个相对布局中。 它在XML文件中设置为位于另一个线性布局的右侧(这很好)。 在某些情况下,我希望在活动的onCreate期间更改布局的相对位置,因此我需要修改“to the right of”参数以与另一个布局相关。 我试着这样做: RelativeLayout.LayoutParams layoutParams; layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove

我有一个线性布局,它包含在一个相对布局中。 它在XML文件中设置为位于另一个线性布局的右侧(这很好)。 在某些情况下,我希望在活动的onCreate期间更改布局的相对位置,因此我需要修改“to the right of”参数以与另一个布局相关。 我试着这样做:

    RelativeLayout.LayoutParams layoutParams;

    layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove
            .getLayoutParams();
    layoutParams.addRule(RelativeLayout.RIGHT_OF,
            R.id.new_ref_LinearLayout);
但它不起作用:哦(


有什么线索吗?

将以下代码添加到现有代码中

linearLayoutToMove.setLayoutParams(layoutParams)


我认为这应该可以完成这项工作。如果上述行不起作用,请尝试在上述行之后调用
linearLayoutToMove.invalidate()

我认为您需要调用:

relativeLayout.UpdateView布局(linearLayoutToMove,layoutParams);

更改布局参数后

作为对编辑的回复,您可以使用以下方法创建新的LayoutParameters:

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

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

您不能删除规则,因为所有规则始终存储在固定大小的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);

由于我在onCreate中,我不需要调用invalidate()。从API级别17开始,RelativeLayout.LayoutParams类具有以下方法:public void removule(int动词)对于API级别17之前的应用程序,我应该做什么o@marienke将规则设置为
0
类似于删除该规则。