Программно добавление полей к объекту кнопки
Нужно задавать левое поле объекту кнопки программно.
Это сегмент кода:
RelativeLayout rl = (RelativeLayout) findViewById(R.id.for_button);
MarginLayoutParams ml = new MarginLayoutParams(-2,-2);
ml.setMargins(5, 0, 0, 0);
Button btn = new Button(this);
btn.setText("7");
btn.setTextColor(Color.WHITE);
btn.setBackgroundResource(R.drawable.date_button);
rl.addView(btn,ml)
Я также пробовал
btn.setLayoutParams(ml);
rl.addView(btn);
Какая большая проблема. Или есть альтернативный способ?
Ответы
Ответ 1
Вы используете RelativeLayout в качестве родителя для кнопки, но вы не укажете никаких правил для нее, где нужно поместить кнопку (например, ALIGN_PARENT_LEFT
и ALIGN_PARENT_TOP
).
Вы должны установить правила для позиции при использовании RelativeLayout, хотя это противоречит раскладке макета. Это означает, что вы должны использовать RelativeLayout.LayoutParams
вместо MarginLayoutParams
, потому что первая разрешает эти правила и имеет соответствующие значения по умолчанию.
Изменить эту строку:
MarginLayoutParams ml = new MarginLayoutParams(-2,-2);
to
RelativeLayout.LayoutParams ml = new RelativeLayout.LayoutParams(-2,-2);
Скорее всего, вы также хотите добавить правила, потому что значения по умолчанию по умолчанию вам не подходят (представления по умолчанию позиционируются в верхнем левом углу родительского макета). Вы можете использовать RelativeLayout.LayoutParams.addRule()
для этого.
Ответ 2
Хорошо, я собираюсь дать этому выстрел IronBlossom; вот как я это делаю, и надеюсь, что это сработает:
LinearLayout myLinearLayout = (LinearLayout)findViewById(R.id.my_linear_layout);
Button myButton = new Button(this);
// more myButton attribute setting here like text etc //
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
params.setMargins(5,0,0,0);
myLinearLayout.addView(myButton, params);
лучше
-serkan