在relativelayout中动态添加文本框的问题

时间:2010-10-18 16:10:18

标签: android relativelayout

我无法在视图中动态添加文本框。更具体地说,文本框加法器工作,但我试图在它下面移动的按钮不起作用。原始视图是下面超链接中的第一张图片。

按下+/-按钮后,应在第二个文本框和决定按钮之间添加一个文本框,然后向下移动+/-按钮,使其位于新框旁边。相反,第二张照片发生了:

http://i.stack.imgur.com/mzBL3.png

我的代码如下所示:

EditText textBox2 = (EditText) findViewById(R.id.box2);

            RelativeLayout rel = (RelativeLayout) findViewById(R.id.mainlayout);

            Context context = getApplicationContext();
            EditText newText = new EditText(context);

            newText.setId(numBoxes);
            numBoxes++;

            LayoutParams p = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
            p.addRule(RelativeLayout.BELOW, bottomView.getId());
            p.addRule(RelativeLayout.ALIGN_RIGHT, bottomView.getId());
            newText.setWidth(220);
            newText.setHeight(LayoutParams.WRAP_CONTENT);
            newText.setLayoutParams(p);
            rel.addView(newText);
            bottomView = newText;
            ((TextView) bottomView).setText((CharSequence)bottomView.getTag());

            LayoutParams b = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
            Button goButton = (Button)findViewById(R.id.decide);
            b = (LayoutParams) goButton.getLayoutParams();
            b.addRule(RelativeLayout.BELOW, bottomView.getId());
            goButton.setLayoutParams(b);

            Button addButton = (Button)findViewById(R.id.addsub);
            b = (LayoutParams) addButton.getLayoutParams();
            b.addRule(RelativeLayout.RIGHT_OF, textBox2.getId());
            b.addRule(RelativeLayout.ALIGN_TOP, bottomView.getId());
            addButton.setLayoutParams(b);

Numboxes只是一个计数器,所以我可以跟踪这些框并相应地命名它们,而bottomView只是最底部的文本框。

我搜索了所有的android开发页面,并尝试创建新的布局参数。我也尝试用文本框替换决定按钮,发生同样的问题。请帮忙。

1 个答案:

答案 0 :(得分:2)

对于那些关心的人,我是这个开发团队的一员,我们解决了问题。

这是问题概念。

LayoutParams p = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

在我们的布局中,我们使用的是相对布局,因此该行应为:

 RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

分配不兼容的布局参数会导致问题。