1

プログラムで RelativeLayout を使用したい (動的な作成に関するいくつかの理由により、xml-layouts を使用できません)。しかし、問題があります。私は、他の「直接の」子供たちとの関係で子供たちを調整することしかできないようです. 次の例を参照してください。

public class PView extends RelativeLayout {
...

private void init(Context context) {
    int viewId = 1;

    LinearLayout center = new LinearLayout(context);
    center.setOrientation(LinearLayout.VERTICAL);

    LinearLayout.LayoutParams topParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    topParams.gravity = Gravity.CENTER_HORIZONTAL;

    frontRow = new LinearLayout(context);
    frontRow.setOrientation(LinearLayout.HORIZONTAL);
    TextView tmp1 = new TextView(context);
    tmp1.setText("TEST TEXT1");
    tmp1.setBackgroundColor(Color.GREEN);
    frontRow.addView(tmp1);


    center.setId(viewId++);
    frontRow.setId(viewId++);

    center.addView(frontRow,topParams);

    LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.addRule(CENTER_IN_PARENT);
    addView(center,params);

    LayoutParams bLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    bLayoutParams.addRule(RelativeLayout.RIGHT_OF, frontRow.getId()); 

    bImageView = new ImageView(context);
bImageView.setImageBitmap(someBitmap);
    addView(bImageView,bLayoutParams);
}

これは機能しません。ImageView bImageView が frontRow の右側に配置されていません。しかし、私が使用する場合

        bLayoutParams.addRule(RelativeLayout.RIGHT_OF, center.getId()); 

右側に表示されます (ただし、明らかに右側のコンポーネントとは関係ありません)。

正確には何が起こっているのですか?RelativeLayout をプログラムで作成する方法については、あまり情報が見つかりませんでした。

4

1 に答える 1

2

RelativeLayoutのルールは、それ自体の直接の子である兄弟にのみ適用されますRelativeLayout。観察しているものは、設計/意図どおりに機能しています。

于 2013-03-15T01:19:50.783 に答える