java - Android RelativeLayout 动态地低于另一个 RelativeLayout

标签 java android android-layout

我正在尝试动态构建由多个图像组成的相关布局。 这些相对布局将显示在先前相对布局的下方/右侧。

我从两个相对布局(rl100 和 rl200)开始。 rl200 低于 rl100。 但是 rl200 并不低于 rl100,而是“堆叠”在 rl100 之上。 你能帮帮我吗?


我的代码:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RelativeLayout rLayout = (RelativeLayout) findViewById(R.id.rlayout);

        RelativeLayout rL100 = rlAdd(rLayout,100,-1,-1);
        ImageButton imgBtn101 = imgBtnAdd(rL100,101,R.drawable.apricot,-1,-1);
        ImageButton imgBtn102 = imgBtnAdd(rL100,102,R.drawable.banana,-1,101);
        ImageButton imgBtn103 = imgBtnAdd(rL100,103,R.drawable.cherry,101,-1);
        ImageButton imgBtn104 = imgBtnAdd(rL100,104,R.drawable.strawberry,102,103);

        RelativeLayout rL200 = rlAdd(rLayout,200,100,-1);
        ImageButton imgBtn201 = imgBtnAdd(rL100,201,R.drawable.pineapple,-1,-1);
        ImageButton imgBtn202 = imgBtnAdd(rL100,202,R.drawable.pineapple,-1,201);
        ImageButton imgBtn203 = imgBtnAdd(rL100,203,R.drawable.pineapple,201,-1);
        ImageButton imgBtn204 = imgBtnAdd(rL100,204,R.drawable.pineapple,202,203);
    }


    private RelativeLayout rlAdd(RelativeLayout parentContainer, int nId, int nIdBelow,
                                 int nIdRightOf) {
        RelativeLayout rLayout = new RelativeLayout(this);
        rLayout.setId(nId);
        RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        if (nIdBelow != -1) {
            rlp.addRule(RelativeLayout.BELOW, nIdBelow);
        }
        if (nIdRightOf != -1) {
            rlp.addRule(RelativeLayout.RIGHT_OF, nIdRightOf);
        }
        rLayout.setLayoutParams(rlp);
        parentContainer.addView(rLayout);
        return rLayout;
    }

    private ImageButton imgBtnAdd(RelativeLayout ParentContainer, int ImgId, int ResDrawable,
                                  int imgIdBelow, int imgIdRightOf) {

        ImageButton imgBtn = new ImageButton(this);
        imgBtn.setId(ImgId);
        imgBtn.setImageResource(ResDrawable);
        ParentContainer.addView(imgBtn);

        RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) imgBtn.getLayoutParams();

        if (imgIdBelow != -1) {
            lp.addRule(RelativeLayout.BELOW, imgIdBelow);
        }
        if (imgIdRightOf != -1) {
            lp.addRule(RelativeLayout.RIGHT_OF, imgIdRightOf);
        }
        imgBtn.setLayoutParams(lp);

        return imgBtn;
    }
}

activity_main.xml :

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"    >
    <RelativeLayout android:id="@+id/rlayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal">
    </RelativeLayout>
</ScrollView>

最佳答案

你在这里做错了

RelativeLayout rL200 = rlAdd(rLayout,100,-1,-1);

// From method
if (nIdBelow != -1) {
     rlp.addRule(RelativeLayout.BELOW, nIdBelow);
}

因为您没有在 nIdBelow 字段中传递 id 它应该如何在下面添加布局。通过上面的图像 ID 或使用垂直方向的线性布局。

关于java - Android RelativeLayout 动态地低于另一个 RelativeLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42721203/

相关文章:

android - 如何创建带有角覆盖的圆形按钮

android - 平板电脑和智能手机上的布局单元

java - 复制数组

java - JDBC:无法获取我的表的复合索引

java - 使用@DataJpaTest 时未配置 JdbcTemplate

android - Android 中的 IMEI PhoneGap 插件

android - 如何在自定义 View 中绘制文本?

java - PDF和 "massive"XMP数据存储

android - 从相机捕获图像,导致方向爆炸

java - ARCore:如何检测光照不足?