Пояснение:
1) Получить ссылку на контейнер макета, куда вставить компонент динамического интерфейса. Если контейнер был создан динамически, у вас уже есть ссылка на него. Если это из макета XML, вы можете получить ссылку с findViewById
.
2) Создать динамический компонент. Вам нужно передать контекст конструктору: используйте this
.
3) Установить свойства созданного компонента.
4) Используйте container.addView(component)
для динамического добавления компонента в контейнер.
Пошаговая демонстрация:
1) Используйте ассистент проекта для создания нового проекта Android с параметрами по умолчанию, пакетом test.test
и действием Main
.
2) Отредактируйте файл res/layout/main.xml
следующим образом.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layoutId"
>
</LinearLayout>
</LinearLayout>
3) Отредактируйте файл src/test.test/Main.java
следующим образом.
package test.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addDynamicButton();
}
/**
* Adds a dynamic button.
*/
private void addDynamicButton() {
// creates a button dynamically
Button btn = new Button(this);
// sets button properties
btn.setText("I'm dynamic. Please click me.");
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast toast = Toast.makeText(Main.this, "Yo!", Toast.LENGTH_LONG);
toast.show();
}
});
// retrieve a reference to the container layout
LinearLayout container = (LinearLayout)findViewById(R.id.layoutId);
// adds dynamic button to the GUI
container.addView(btn);
}
}
4) Скомпилируйте и запустите приложение для Android. Теперь вы знаете, как это работает, и вы можете использовать эту технику для добавления компонентов любого типа в любой контейнер макета.