试图了解相对布局

时间:2013-08-01 02:42:00

标签: android adt

Android开发者全新,我试图弄清楚什么是一小段代码。

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

  

BUTTON BUTTON

     

| _ _ | BUTTON

我的功能在第一次点击时添加了我希望它的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);

            }
        });

2 个答案:

答案 0 :(得分:1)

考虑到某些原因,right.addRule不计算添加到视图中的新子timerName

我们知道btnAddNewTimer需要放在timerName edittext的右侧,请尝试将timerName id传递给right.addRule

所以不是..

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

...试

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

希望这有帮助。

答案 1 :(得分: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);