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);
}
});
答案 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);