Динамическое отображение кнопок программно для Android
Я хочу добавить кнопки программно на экране, и я получаю значение, анализируя API
и теперь я хочу отобразить кнопки в соответствии с длиной массива. Я делаю это, но у меня отображается только последняя кнопка, но внутри for
цикл Я получаю все значения правильно, но отображается только последняя кнопка. Это мой код:
RelativeLayout relate;
//...
relate = (RelativeLayout)findViewById(R.id.relative);
protected void onPostExecute(Void result) {
if(dialog.isShowing() == true) {
dialog.dismiss();
}
//int width = 100, height =50, x = 10, y = 20;
for (int i =0;i<adapt_obj.city_name_array.length;i++){
b1 = new Button(myref);
b1.setText(adapt_obj.city_name_array[i]);
relate.addView(b1);
//relate.addView(b1, i, new RelativeLayout.LayoutParams(width,height));
//height = height+80;
}
listlocation.setAdapter(adapt_obj);
adapt_obj.notifyDataSetChanged();
}
3 ответа
RelativeLayout
будет складывать представления, которые вы добавляете к нему, в верхний угол, если вы не укажете некоторые правила размещения. Ваши кнопки добавляются в макет, но они располагаются друг над другом, поэтому видна только последняя добавленная вами. Вот некоторые модификации вашего for
цикл:
RelativeLayout relate; relate = (RelativeLayout)findViewById(R.id.relative);
for (int i = 0; i < adapt_obj.city_name_array.length; i++){
Button b1 = new Button(myref);
b1.setId(100 + i);
b1.setText(adapt_obj.city_name_array[i]);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
if (i > 0) {
lp.addRule(RelativeLayout.BELOW, b1.getId() - 1);
}
b1.setLayoutParams(lp);
relate.addView(b1);
}
Вы не должны давать значения x и y в Android. Вы можете добавить нижний левый верхний угол элемента. Также параметры макета вы должны использовать wrap_content или fill_parent.
Button button = new Button(this);
button.setText(@"text");
button.setLayoutParams(new LayoutParams(WRAP_CONTENT,WRAP_CONTENT));
layout.addView(button);
Я думаю, что проблема с относительным расположением. Ваши кнопки могут быть наложены друг на друга. Попробуйте сделать родительский план линейным.