android - 以编程方式使用 relativeLayout 不适用于 deep inner child

标签 android android-relativelayout

我想以编程方式使用 RelativeLayout(出于某些与动态创建有关的原因,我无法使用 xml 布局)。但是有一个问题,我似乎只能根据其他“直接” child 来调整 child 。请参阅以下示例:

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 的信息。

最佳答案

RelativeLayout 的规则仅适用于 RelativeLayout 本身的直接子级的 sibling 。您所观察到的正在按设计/预期工作。

关于android - 以编程方式使用 relativeLayout 不适用于 deep inner child,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15423087/

相关文章:

Android 相对布局无法使图像居中

android - 应用程序意外停止 : Fatal Exception: MAIN

android - 结合移动翻译+ Activity 过渡动画

android - 在相对布局中看不到编辑文本(屏幕外)

Android - 在 subview 触摸上忽略父 View 触摸

android - ScrollView 中的LinearLayout : Make last child have minHeight and fill empty space if necessary

android - Gradle API执行任务失败-未发现错误

java - 为什么 setMaxBatchSize() 对于 RxAndroidBle 中较大的 MTU 没有用?

android - Kotlin中view.setOnLongClickListener和view.onClick的比较

java - 我如何结合 Relative 和 Linear 来实现这个 XML?