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 回答