我想以编程方式使用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的很多信息。
答案 0 :(得分:2)
RelativeLayout
的规则仅适用于RelativeLayout
本身直接子女的兄弟姐妹。您所观察到的是按设计/预期工作。