如何以编程方式删除在XML中定义的现有规则?
我有一个相对布局内包含的线性布局。 它在XML文件中设置在另一个线性布局的右侧(这可以正常工作)。 在某些情况下,我想在活动的onCreate期间更改布局的相对位置,所以我需要修改“右边”参数与另一个布局相关。 我试过这个:
RelativeLayout.LayoutParams layoutParams; layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove .getLayoutParams(); layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.new_ref_LinearLayout);
但它不起作用:o(
任何线索?
您不能删除规则,因为所有规则总是存储在固定大小的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之后。
在回复编辑时,您可以使用以下命令创build新的LayoutParameters:
LinearLayout.LayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
然后添加你的新规则。 然后,使用前面提到的updateViewLayout()方法更新布局参数。
将下面的代码添加到您现有的代码
linearLayoutToMove.setLayoutParams(layoutParams)
我认为这应该做的工作。 如果上述行不工作,请尝试在上面的行之后调用linearLayoutToMove.invalidate()
。