В настоящее время я понимаю, что могу создать XML-макет и передать его в setContentView (...), или я могу передать настраиваемое представление в setContentView (...).
Но что, если я хочу объединить элементы обоих? Возможно ли сначала использовать макет, а затем программно добавить в пользовательский интерфейс через java-код?
Например: как я могу создать представление, в котором используется фоновое изображение Asset с добавленным виджетами загрузки сверху?
ДОБАВЛЕННЫЙ ЗАПРОС: прямо сейчас, и я думаю о представлении и макете как о двух вещах для отображения setContentView. Но может ли вид View содержать макет внутри него для отображения?
Да, возможно установить XML-макет с помощью setContentView() и программно добавить к этому макету больше видов/виджета. Вот краткий пример.
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/background_image">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Some text"/>
<LinearLayout
android:id="@+id/custom_content_root"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- This is where we will add views programmatically -->
</LinearLayout>
</LinearLayout>
TestActivity.java
public class TestActivity extends Activity {
private LinearLayout mRoot;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the layout
setContentView(R.layout.main);
// Get the Linearlayout we want to add new content to..
mRoot = (LinearLayout) findViewById(R.id.custom_content_root);
// Create a TextView for example
TextView moreText = new TextView(this);
// Set the layout parameters of the new textview.
moreText.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
moreText.setText("More text :)");
// Add the new textview to our existing layout
mRoot.addView(moreText);
}
}
Результатом является действие с background_image.png в качестве фона и два текстовых изображения с текстом;)
Таким образом вы можете добавить любой тип вида (TextView, EditText, ImageView, Buttons и т.д.).
Да, после использования setContentView() можно добавлять виджеты. Также можно раздувать XML-макеты самостоятельно, используя LayoutInflater.
Вы можете добавить виджет загрузки в макет, который был определен внутри вашего XML, используя его, используя findViewById, а затем используя метод из ViewGroup.