Android 将项目动态放入RelativeLayout

Android 将项目动态放入RelativeLayout,android,Android,我做了一些研究,但我发现的答案对我不适用。这是我代码的一部分。R.id.relative是xml文件中relativelayout的id RelativeLayout RL = (RelativeLayout) findViewById(R.id.relative); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATC

我做了一些研究,但我发现的答案对我不适用。这是我代码的一部分。R.id.relative是xml文件中relativelayout的id

    RelativeLayout RL = (RelativeLayout) findViewById(R.id.relative);

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

    TextView title = new TextView(this);
    title.setText(" History ");
    title.setId(99099);
    title.setTextSize(30);
    title.setGravity(Gravity.CENTER);
    params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    title.setLayoutParams(params);

    RL.addView(title);

    RelativeLayout.LayoutParams test_params = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);

    Button test = new Button(this);
    test.setText(" Back ");
    test_params.addRule(RelativeLayout.BELOW,99099);
    test.setId(199291);
    test.setGravity(Gravity.CENTER);
    test.setLayoutParams(test_params);

    RL.addView(test);

    RelativeLayout.LayoutParams test_params2 = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);

    Button test2 = new Button(this);
    test2.setText(" Clear ");
    test_params2.addRule(RelativeLayout.BELOW,test.getId());
    test2.setGravity(Gravity.CENTER);
    test.setLayoutParams(test_params2);

    RL.addView(test2);
所有3项都出现了,但它们叠加在一起。我不能把它们放在另一个下面。
有人能帮忙吗?

更改
test.setLayoutParams(test\u params2)
test2.setLayoutParams(测试参数2)

说明:您第二次无意中设置了
test
的布局参数,这些参数指示它位于自身下方,我想这只是将它放在左上方(默认放置在
RelativeLayout
中)。由于您从未给出
test2
任何布局参数,因此它也会获得默认位置。所以所有的东西都在上面,所以它们彼此都在上面


顺便说一句,如果您只是想让它们线性排列,为什么不使用垂直的
线性布局呢?

根据我的了解,您必须使用LayoutParams添加视图。下面是一个例子:

LinearLayout linearLayout = new LinearLayout(this);

RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
relativeParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);

parentView.addView(linearLayout, relativeParams);
要以编程方式相对定位项目,您必须为它们分配ID,这会阻止它们“重叠”

TextView tv1 = new TextView(this);
tv1.setId(1);
TextView tv2 = new TextView(this);
tv2.setId(2);

然后
addRule(RelativeLayout.RIGHT_OF,tv1.getId())

您添加的规则导致视图堆叠在一起。如果需要添加,则应使用以下规则

    test_params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1);
接下来,使用LayoutParams将视图添加到RelativeLayout:

  RL.addView(yourAdView, rLParams);

每种情况也一样。试着运行。它会解决你的问题

你认为Android会忽略你的规则吗-
addRule(RelativeLayout.down,title.getId())?当您将title.getId()更改为id值99099时会发生什么?仍然是一样的,现在我正在尝试将参数放入addview方法中。我对这一行非常好奇:parentView.addview(linearLayout,relativeParams);这是否意味着我在xml文件的布局中添加了另一个RelativeLayout;这只是一个示例rLParams是否等于test_params?我应该这样写:RL.addView(Btn1,test_参数);哦,不错,使用addView设置布局是正确的。谢谢你的评论。我的评论还是被投了反对票。谢谢你的赞赏:(我在这里太新了。不能给你任何积极的评价。)