У меня есть формат android xml, main.xml. Я хотел бы добавить элементы управления к этому макету во время выполнения (я хотел бы добавить ряд дополнительных линейных макетов, содержащих элементы управления кнопками). Могу ли я это сделать, и если да, то как?
благодаря
Я вижу ошибку, которую делает ур здесь
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);
Вы можете добавлять элементы управления программно, если хотите, в свой код или даже другой XML с представлением и Inflater.
Здесь вы можете прочитать основы: 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 в объекте представления, т. Е.
container.addView(buttonsLayout); this.setContentView(view);
Вы можете сделать это довольно просто, установив id в макет, на который вы хотите добавить виды. Скажем, ваш 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 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
содержащую 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);
Это может помочь вам