Android 以编程方式在相对布局中将一个视图添加到另一个视图之下

Android 以编程方式在相对布局中将一个视图添加到另一个视图之下,android,Android,我希望以编程方式实现如下功能: view1 | view2 view3 | view4 ---------------- view1 | view2 view3 | view4 ---------------- view1 | view2 view3 | view4 --------------- ........... ...... which keeps repeating -------------- 我不想使用ListView。重要提示:记住为每个视图设置ID ImageV

我希望以编程方式实现如下功能:

view1 |  view2
view3 |  view4
----------------
view1 |  view2
view3 |  view4
----------------
view1 |  view2
view3 |  view4
---------------
...........
......
which keeps repeating
--------------

我不想使用ListView。

重要提示:记住为每个视图设置ID

ImageView imageView = new ImageView(this);


// set the Drawable on the ImageView
imageView.setImageDrawable(bmd);

// center the Image
imageView.setScaleType(ScaleType.CENTER);

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
RelativeLayout layout = new RelativeLayout(this);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
layout.setLayoutParams(layoutParams);

RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams params3 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

TextView tv1 = new TextView(this);
tv1.setId(1);
tv1.setText("textView1");

TextView tv2 = new TextView(this);
params2.addRule(RelativeLayout.RIGHT_OF, tv1.getId());
tv2.setId(2);
tv2.setText("textView2");

TextView tv3 = new TextView(this);
params3.addRule(RelativeLayout.BELOW, tv1.getId());
tv3.setId(3);
tv3.setText("textView3");

TextView tv4 = new TextView(this);
params4.addRule(RelativeLayout.RIGHT_OF, tv3.getId());
params4.addRule(RelativeLayout.ALIGN_BOTTOM, tv3.getId());
tv4.setId(4);
tv4.setText("textView4");

layout.addView(tv1, params1);
layout.addView(tv2, params2);
layout.addView(tv3, params3);
layout.addView(tv4, params4);

您可以使用
addRule
removule
来代替@Askilondz answer中建议的多个布局参数,如下所示:

RelativeLayout rl = new RelativeLayout(this.getContext());
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,                                                                                     
                            LayoutParams.WRAP_CONTENT);
TextView tv1 = new TextView(this);
tv1.setId(View.generateViewId());
tv1.setText("textView1");

TextView tv2 = new TextView(this);
tv2.setId(View.generateViewId());
tv2.setText("textView2");
lp.addRule(RelativeLayout.BELOW, tv1.getId());
rl.addView(tv2, lp);
lp.removeRule(RelativeLayout.BELOW);
.
.
.
如果您使用的是SDK<17,则必须创建
id.xml
文件,如
values->ids.xml
,其结构如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tv1" type="id" />
    <item name="tv2" type="id" />
</resources>
更新
看来为同一个布局参数添加多个规则效果不好,无论如何,我会保留我的答案,以防有人在其中找到有用的东西

你可以使用膨胀视图并通过循环添加它们。。!!你好对于params调用方法addRule(以下为_last_child的id_)。请记住,组件的id从1开始,而不是从0开始。像tv1.setId(0)和tv2.setId(1)一样,可以将两个组件放在同一个位置。setId(1)和setId(2)可以解决这个问题,只能在API 17中使用。API小于17时可以使用什么?请改用ViewCompat.generateViewId()
tv1.setId(R.id.tv1);
tv2.setId(R.id.tv2);