Android 我想通过编程方式在RelativeLayout中添加一对EditText,只需单击一个按钮
第一组编辑文本整齐地一个接一个地添加,但再次单击按钮时,视图会重叠。我想我需要适当地设置利润率,但我无法计算出来。请帮忙Android 我想通过编程方式在RelativeLayout中添加一对EditText,只需单击一个按钮,android,android-edittext,textview,android-relativelayout,Android,Android Edittext,Textview,Android Relativelayout,第一组编辑文本整齐地一个接一个地添加,但再次单击按钮时,视图会重叠。我想我需要适当地设置利润率,但我无法计算出来。请帮忙 public class MainActivity extends Activity implements OnClickListener { Button btn_task, btn_subTask; EditText et_task, et_subTask; RelativeLayout lv_subtask, lv_task; int i
public class MainActivity extends Activity implements OnClickListener {
Button btn_task, btn_subTask;
EditText et_task, et_subTask;
RelativeLayout lv_subtask, lv_task;
int i = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_task = (Button) findViewById(R.id.btn_addTask);
btn_subTask = (Button) findViewById(R.id.btn_subTask);
lv_subtask = (RelativeLayout) findViewById(R.id.lv_subtask);
lv_task = (RelativeLayout) findViewById(R.id.lv_task);
// btn_task.setOnClickListener(this);
btn_subTask.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
if (v.equals(btn_subTask)) {
EditText et_title = new EditText(this);
EditText et_date = new EditText(this);
i++;
et_title.setId(i);
et_date.setId(i + 1);
et_title.setHint("Enter sub task");
et_date.setHint("Enter end date");
// lv_subtask.setVisibility(View.VISIBLE);
RelativeLayout.LayoutParams EditLayoutParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams DateLayoutParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
DateLayoutParams.setMargins(5, 10, 0, 0);
EditLayoutParams.setMargins(5, 20, 0, 0);
if (i != 1) {
EditLayoutParams.addRule(RelativeLayout.BELOW, i + 1);
DateLayoutParams.addRule(RelativeLayout.BELOW, i + 2);
} else {
DateLayoutParams.addRule(RelativeLayout.BELOW, 1);
}
et_title.setLayoutParams(EditLayoutParams);
et_date.setLayoutParams(DateLayoutParams);
(lv_subtask).addView(et_title);
(lv_subtask).addView(et_date);
}
}
}
看起来你没有正确使用计数器。首先,每次调用onClick时,只需将其递增1,但要添加2个视图。此外,当您尝试将新视图放在以前视图的下方时,您正在向计数器中添加新视图,它将引用您尚未设置的ID。试试这个:
if (v.equals(btn_subTask)) {
EditText et_title = new EditText(this);
EditText et_date = new EditText(this);
et_title.setId(++i); // 1, 3, ...
et_date.setId(++i); // 2, 4, ...
et_title.setHint("Enter sub task");
et_date.setHint("Enter end date");
// lv_subtask.setVisibility(View.VISIBLE);
RelativeLayout.LayoutParams EditLayoutParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams DateLayoutParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
DateLayoutParams.setMargins(5, 10, 0, 0);
EditLayoutParams.setMargins(5, 20, 0, 0);
if (i != 2) {
EditLayoutParams.addRule(RelativeLayout.BELOW, i - 2); // below last view added
}
DateLayoutParams.addRule(RelativeLayout.BELOW, i - 1); // always below current edit
et_title.setLayoutParams(EditLayoutParams);
et_date.setLayoutParams(DateLayoutParams);
(lv_subtask).addView(et_title);
(lv_subtask).addView(et_date);
}
如果两个EditText神奇地出现,请将EditText隐藏在布局中,然后在单击按钮时使其可见。诀窍在于,当你设计它们时,它们总是可见的,而当应用程序启动时,你会隐藏它们 为可见性定义一个布尔值,然后在onResume中使用该布尔值设置可见性
boolean ismyedittextvisible = false;
public void onResume();
super.onResume();
view.findViewById(R.id.myedittext)
.setVisibility(ismyedittextvisible ? View.VISIBLE : View.GONE);
在按钮中,单击以调整布尔值并刷新可见性
@Override
public void onClick(final View v) {
if (v.getId() == R.id.mybutton) {
ismyedittextvisisble = !ismyedittextvisible;
view.findViewById(R.id.myedittext)
.setVisibility(ismyedittextvisible ? View.VISIBLE : View.GONE);
}
}
为什么不在else语句中向EditLayoutParams添加任何规则?谢谢您的建议。但我想如果我只需要查看一次,这会很有帮助。但在这里,我将添加编辑文本对,每次点击按钮。感谢您指出错误。你的解决方案奏效了。谢谢