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

时间:2011-02-24 16:47:56

标签: android android-layout android-relativelayout layoutparams

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

    RelativeLayout.LayoutParams layoutParams;

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

但它不起作用:o(

任何线索?

3 个答案:

答案 0 :(得分:143)

您无法删除规则,因为所有规则始终存储在固定大小的Java数组中。但您可以将规则设置为0。例如

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

编辑(感谢Roger Rapid):

从API级别17开始,类RelativeLayout.LayoutParams具有以下方法:

public void removeRule(int verb) 

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

layoutParams.removeRule(RelativeLayout.RIGHT_OF);

您将获得与“添加”零规则时完全相同的结果:

layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);

答案 1 :(得分:3)

我想你需要打电话:

relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);

更改LayoutParams后

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

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

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

答案 2 :(得分:0)

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

linearLayoutToMove.setLayoutParams(layoutParams)

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

相关问题