Как добавить элемент управления button в xml-представление android во время выполнения?

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

спасибо

6 ответов


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

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

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

попробуй такое

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

Button b1 = new Button(this);

b1.setText("Btn");

lnr.addView(b1);

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

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


хорошо, я должен работать.

шаги следующие: Сначала надуйте XML-макет, т. е.

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

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

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

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

container.addView(buttonsLayout);
this.setContentView(view);

вы можете сделать это довольно легко, установив идентификатор макета, на который вы хотите добавить представления. Скажи свое главное.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 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.


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

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

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

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

Теперь, если вы хотите добавить onether linearlayout, добавьте его ниже кнопки, затем

 LinearLayout llinner = new LinearLayout(this);

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

llinner.addView(btn2 );

mainLinearLayout .addView(llinner);

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

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

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