Как добавить элемент управления кнопки в Android-представление XML во время выполнения? - PullRequest
8 голосов
/ 07 февраля 2011

У меня есть макет Android xml, main.xml.Я хотел бы добавить элементы управления к этому макету во время выполнения (я хотел бы добавить ряд дополнительных линейных макетов, которые содержат элементы управления кнопок).Могу ли я это сделать, и если да, то как?

Спасибо

Ответы [ 6 ]

6 голосов
/ 07 февраля 2011

Я вижу ошибку, которую вы делаете здесь

LinearLayout mainLayout = (LinearLayout) findViewById(R.layout.main);

Вы берете макет в качестве объекта Linearlayout, вы должны взять идентификатор LinearLayout

Попробуйте это

LinearLayout lnr = (LinearLayout) findViewById(R.id.LinearLayout01);

Button b1 = new Button(this);

b1.setText("Btn");

lnr.addView(b1);
3 голосов
/ 09 февраля 2011

Хорошо, у меня это работает.

Шаги следующие: сначала надуйте макет xml, т.е.

View view = View.inflate(this, R.layout.main, null);

Затем создайте экземпляр объекта контейнера из макета xml в классе ViewGroup, т. Е.

ViewGroup container = (ViewGroup) view.findViewById(R.id.myContainer);

Затем создайте объект linearLayout, создайте и добавьте к нему все необходимые элементы управления, добавьте linearLayout к объекту-контейнеру и используйте setContentView для объекта представления, т. Е.

container.addView(buttonsLayout);
this.setContentView(view);
3 голосов
/ 07 февраля 2011

Вы можете добавить элементы управления программно, если хотите, в свой код или даже в другой XML-файл с View и Inflater.

Здесь вы можете прочитать основы: http://developer.android.com/guide/topics/ui/declaring-layout.html

0 голосов
/ 20 сентября 2015

Попробуйте это:

LinearLayout ll =(LinearLayout)findViewById(R.id.linlay);
Button b = new Button(this);
b.setText("Hello");
l.addView(b);

Это может помочь вам

0 голосов
/ 15 ноября 2011

просто попробуйте это:

LinearLayout mainLinearLayout = (LinearLayout) findViewById(R.layout.llmain);

теперь создайте кнопку динамически, как это

 Button btn1 = new Button(this);
 btn1.setText=("Button 1");
 mainLinearLayout .addView(btn1);

, теперь, если вы хотите добавить линейную линейную развертку, добавьте ее ниже кнопки, затем

 LinearLayout llinner = new LinearLayout(this);

 Button btn2 = new Button(this);
 btn2.setText=("Button 2");
mainLinearLayout .addView(btn2);

llinner.addView(btn2 );

mainLinearLayout .addView(llinner);
0 голосов
/ 07 февраля 2011

Вы можете сделать это довольно легко, установив идентификатор на макете, к которому вы хотите добавить виды.Скажем, ваш main.xml выглядит так:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
  <TextView android:id="@+id/label"
      android:layout_width="fill_parent"/>
  <LinearLayout android:id="@+id/container"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
  </LinearLayout>
</LinearLayout>

Предположим, что вы хотите добавить свои дополнительные представления в LinearLayout с идентификатором id/container.В вашем методе onCreate вы можете получить этот объект для последующего использования:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mContainer = (ViewGroup)view.findViewById(R.id.container);
}

Теперь все готово для добавления других представлений в ваш контейнер ViewGroup:

LinearLayout theButtons = getButtons()
mContainer.addView(theButtons);

ВgetButtons метод, который вам нужен, чтобы создать LinearLayout, содержащий нужные вам кнопки.Либо вы делаете это программно, либо надувая представление, определенное в файле XML.См. LayoutInflater.inflate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...