-1

我做了一些研究,但我找到的答案对我不起作用。这是我的代码的一部分。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 个项目都出现了,但它们堆叠在一起。我不能让他们低于另一个。有人可以帮忙吗?

4

3 回答 3

1

据我所知,您必须使用 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());

于 2013-05-11T05:32:52.307 回答
0

更改test.setLayoutParams(test_params2);test2.setLayoutParams(test_params2);

说明:您无意中设置test了第二次的布局参数,其参数指示它位于自身下方,我猜这只是将其放在左上角(默认放置在 a 中RelativeLayout)。由于您从不提供test2任何布局参数,因此它也会获得默认位置。所以一切都在顶部,因此出现在彼此之上。

顺便说一句,如果你只是想让它们线性排列,为什么不使用 verticalLinearLayout呢?

于 2013-05-11T05:31:50.563 回答
-1

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

    test_params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1);

接下来,使用 LayoutParams 将视图添加到 RelativeLayout:

  RL.addView(yourAdView, rLParams);

每个案例都一样。尝试运行。它将解决您的问题

于 2013-05-11T05:35:22.870 回答