Я создаю элементы для относительной компоновки программным образом, каждый раз подготавливая разные элементы. Я могу сделать элементы TextView и EditText правильными, ниже друг друга без перекрытия, но второй я добавил флажки и кнопки, все стало беспорядком. Это мой код:Элементы, перекрывающиеся динамически генерируемым макетом Android.
RelativeLayout mRlayout = (RelativeLayout) findViewById(R.id.checkFieldsLayout);
for (int i = 1; i < fields.size(); i++) {
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params1.addRule(RelativeLayout.BELOW,fields.size()+i -1);
RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params2.addRule(RelativeLayout.BELOW, i);
String thisHeader = fields.get(i).replace("_", " ").toString();
if (thisHeader.contains("chkbox")) {
CheckBox chkbox = new CheckBox(this);
chkbox.setId(i);
chkbox.setText(thisHeader);
chkbox.setLayoutParams(params1);
mRlayout.addView(chkbox);
if (thisHeader.contains("chkboximg")) {
Button upload_btn = new Button(this);
upload_btn.setId(i);
upload_btn.setLayoutParams(params1);
upload_btn.setText("Select Image");
upload_btn.setOnClickListener(this);
mRlayout.addView(upload_btn);
}
} else {
TextView header = new TextView(this);
header.setText(StringUtils.capitalize(thisHeader));
header.setId(i);
header.setLayoutParams(params1);
EditText field = new EditText(this);
field.setLayoutParams(params2);
field.setId(fields.size() + i);
mRlayout.addView(header);
mRlayout.addView(field);
}
}
Может кто-нибудь выяснить, как настроить параметры макета правильно, так что каждый из элементов отображается под предыдущим элементом?
Это не может быть так сложно, я уверен, что это пара правил компоновки, которые мне не хватает. –