70

相対レイアウト内に含まれる線形レイアウトがあります。別の線形レイアウトの右側にあるように XML ファイルに設定されています (これは正常に機能します)。場合によっては、アクティビティの onCreate 中にレイアウトの相対的な位置を変更したいので、別のレイアウトに関連するように "to the right of" パラメータを変更する必要があります。私はこれを試しました:

    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);

編集( Roger Rapidに感謝):

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 に答える