我有一个包含在相对布局中的线性布局。 它在XML文件中设置为另一个线性布局的右侧(这很好)。 在某些情况下,我想在活动的onCreate期间更改布局的相对位置,因此我需要修改“右侧”参数以与另一个布局相关联。 我试过这个:
RelativeLayout.LayoutParams layoutParams;
layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove
.getLayoutParams();
layoutParams.addRule(RelativeLayout.RIGHT_OF,
R.id.new_ref_LinearLayout);
但它不起作用:o(
任何线索?
答案 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);
。
在回复编辑时,您可以使用以下方法创建新的LayoutParameters:
LinearLayout.LayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
然后添加新规则。然后,使用前面提到的updateViewLayout()方法更新布局参数。
答案 2 :(得分:0)
将以下代码添加到现有代码
linearLayoutToMove.setLayoutParams(layoutParams)
我认为这应该可以胜任。如果上述行不起作用,请尝试在上述行之后调用linearLayoutToMove.invalidate()
。