我想以编程方式使用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 的太多信息。