2

对 Android 开发人员来说是全新的,我正在尝试用一小段代码找出问题所在。

我有一个相对布局(我相信它最适合我的需要)。我在 activity_main.xml 文件中指定的一行上有两个按钮。当我按下其中一个按钮时,我希望 EditText 字段和按钮重复出现在同一行上,在最后一组项目下方。有点像这样:

按钮 按钮

| _ _| 按钮

我的函数在第一次点击时添加了我期望的 EditText,但是我最终得到了一排 3 个按钮,如下所示:

按钮 按钮 按钮

| _ _|

代码在下面,我是否缺少有关相对布局的内容?我是否以非常糟糕的方式访问元素?

//Get main layout as defined in activity_main.xml
        final RelativeLayout rl = (RelativeLayout)this.findViewById(R.id.rootLayout);


        //Setup rules
        final RelativeLayout.LayoutParams below = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        final RelativeLayout.LayoutParams right = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);      

        newTimer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                below.addRule(RelativeLayout.BELOW,rl.getChildAt(rl.getChildCount()-1).getId() );

                EditText timerName = new EditText(MainActivity.this);
                Button btnAddNewTimer = new Button(MainActivity.this);

                timerName.setText("New Timer");
                timerName.setVisibility(View.VISIBLE);
                timerName.setLayoutParams(below);

                rl.addView(timerName);

                right.addRule(RelativeLayout.RIGHT_OF,rl.getChildAt(rl.getChildCount()-1).getId());

                btnAddNewTimer.setText("Add");
                btnAddNewTimer.setVisibility(View.VISIBLE);
                btnAddNewTimer.setLayoutParams(right);

                rl.addView(btnAddNewTimer);

            }
        });
4

2 回答 2

1

出于某种原因认为,这right.addRule不包括timerName添加到视图中的新孩子。

我们知道btnAddNewTimer需要将其放在timerNameedittext的右侧,请尝试timerName idright.addRule.

所以代替..

right.addRule(RelativeLayout.RIGHT_OF,rl.getChildAt(rl.getChildCount()-1).getId());

尝试...

right.addRule(RelativeLayout.RIGHT_OF, timerName.getId());

希望这可以帮助。

于 2013-08-01T03:06:04.753 回答
1

我个人不相信 getChildCount()-1).getId() 可以获得最后添加的视图。

此外,您需要指定一个布局参数,以指定您希望新项目垂直放置的位置。因此,您需要在右侧添加一条规则,使其顶部与按钮对齐。

我建议您获取添加视图的 id

            timerName.setText("New Timer");
            timerName.setVisibility(View.VISIBLE);
            timerName.setLayoutParams(below);
            timerName.setId(39);//or some other unique id in this range
            rl.addView(timerName);


            right.addRule(RelativeLayout.RIGHT_OF, timerName.getId());
            right.addRUle(RelativeLayout.ALIGN_TOP,timerName.getId());

            btnAddNewTimer.setText("Add");
            btnAddNewTimer.setVisibility(View.VISIBLE);
            btnAddNewTimer.setLayoutParams(right);
于 2013-08-01T03:08:47.630 回答