2013-05-11 39 views
-1

我已经做了一些研究,但我发现的答案对我无效。这是我的代码的一部分。该R.id.relative是在XML中的RelativeLayout的ID文件动态地将项目放在RelativeLayout中

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个项目都出现了,但他们堆叠在一起。我无法让他们低于另一个。 任何人都可以帮忙吗?

+0

你认为Android忽略你的规则 - 'addRule(RelativeLayout.BELOW,title.getId());'? – Axarydax 2013-05-11 05:28:21

+0

将title.getId()更改为99099的id值时会发生什么? – Axarydax 2013-05-11 05:29:28

+0

雅仍然是相同的,现在我试图将参数放入addview方法。 – user2372160 2013-05-11 07:57:58

回答

-1

已添加导致您的观点将被堆叠together.If你需要添加它应该由以下规则使用的规则。

test_params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1); 

接下来,视图添加到您的RelativeLayout与你的LayoutParams:

RL.addView(yourAdView, rLParams); 

同样适用于每个cases.try到run.It将解决您的问题

+0

rLParams是否等于test_params? 我应该像这样:** RL.addView(Btn1,test_params); ** – user2372160 2013-05-11 07:54:20

+0

哦,它的工作原理,使用addView来设置布局是正确的 – user2372160 2013-05-11 08:11:40

+0

感谢您的评论......我仍然对我的评论得到了反对票。谢谢你的赞赏 – Chiradeep 2013-05-11 08:30:26

0

变化test.setLayoutParams(test_params2);test2.setLayoutParams(test_params2);

说明:您在不经意间设置的test布局PARAMS第二次,与指示它PARAMS将低于本身,我想只是把它左上角(默认放置在一个RelativeLayout)。既然你从不给test2任何布局参数,它也会得到默认的位置。所以一切都在顶端,因此出现在彼此之上。顺便说一下,如果你只是想让它们线性排列,为什么不使用垂直LinearLayout

+0

为什么这是低调? – Karakuri 2013-05-11 05:47:56

+0

+1的好解释 – AndroidDev 2013-05-11 07:22:01

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());

+0

我很好奇这行:** parentView.addView(linearLayout,relativeParams); **这是否意味着我把另一个RelativeLayout放到我的布局在xml文件中。 – user2372160 2013-05-11 07:06:26

+1

是;这只是一个例子 – AndroidDev 2013-05-11 07:22:42

相关问题