Android 试图理解相关布局
Android dev是一个全新的开发者,我正试图用一小段代码找出哪些地方出了问题 我有一个相对的布局(我认为最适合我的需要)。我在activity_main.xml文件中指定的一行上有两个按钮。当我按下其中一个按钮时,我想让EditText字段和按钮重复出现在同一行上,位于最后一组项目的下方。有点像这样: 按钮 |__|钮扣 我的函数会在第一次点击时添加EditText,但最后会出现一行3个按钮,如下所示: 按钮 |__| 下面是代码,我是否缺少有关相对布局的内容?我是否以一种糟糕透顶的方式访问元素Android 试图理解相关布局,android,adt,Android,Adt,Android dev是一个全新的开发者,我正试图用一小段代码找出哪些地方出了问题 我有一个相对的布局(我认为最适合我的需要)。我在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);
}
});
考虑到某些原因,
right.addRule
没有计算添加到视图中的新子项timerName
正如我们所知,btnAddNewTimer
需要放置在timerName
edittext的右侧,请尝试将timerName id
传递到右侧。addRule
因此,与其
right.addRule(RelativeLayout.RIGHT_OF,rl.getChildAt(rl.getChildCount()-1).getId());
试试看
right.addRule(RelativeLayout.RIGHT_OF, timerName.getId());
希望这能有所帮助。我个人不相信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);
后续子问题,为什么范围为39?我检查了最后一个孩子的id,其范围为2131230722。id保证一直都那么大吗?它们很大。我相信所有通过XMLA分配的id都被限制为0x00FFFFFF以上的值,但目前我找不到确切的文档。