70

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

    RelativeLayout.LayoutParams layoutParams;

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

但它不起作用:o(

有什么线索吗?

4

3 回答 3

153

您无法删除规则,因为所有规则始终存储在固定大小的 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);
于 2011-02-24T21:36:01.413 回答
3

我认为您需要致电:

relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);

更改 LayoutParams 后。

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

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

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

于 2011-02-24T16:55:51.243 回答
0

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

linearLayoutToMove.setLayoutParams(layoutParams)

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

于 2011-02-24T16:54:13.367 回答