相対レイアウト内に含まれる線形レイアウトがあります。 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);
[〜#〜] edit [〜#〜](おかげで Roger Rapid ):
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を変更した後。
編集に応答して、次を使用して新しいLayoutParametersを作成できます。
LinearLayout.LayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
その後、新しいルールを追加します。次に、前述のupdateViewLayout()メソッドを使用してレイアウトパラメーターを更新します。
次のコードを既存のコードに追加します
linearLayoutToMove.setLayoutParams(layoutParams)
これでうまくいくと思います。上記の行が機能しない場合は、上記の行の後にlinearLayoutToMove.invalidate()
を呼び出してください。