Как отобразить пользовательский интерфейс Android через XML Layout?

1

В настоящее время я понимаю, что могу создать XML-макет и передать его в setContentView (...), или я могу передать настраиваемое представление в setContentView (...).

Но что, если я хочу объединить элементы обоих? Возможно ли сначала использовать макет, а затем программно добавить в пользовательский интерфейс через java-код?

Например: как я могу создать представление, в котором используется фоновое изображение Asset с добавленным виджетами загрузки сверху?

ДОБАВЛЕННЫЙ ЗАПРОС: прямо сейчас, и я думаю о представлении и макете как о двух вещах для отображения setContentView. Но может ли вид View содержать макет внутри него для отображения?

  • 1
    Есть ли какая-то особая причина, по которой изображение находится в вашей папке ресурсов, а не в папке для рисования?
  • 0
    нет, я даже не знал, что есть другая папка. Что должно идти в активах и должно быть в рисовании?
Показать ещё 1 комментарий
Теги:
user-interface
layout

2 ответа

1
Лучший ответ

Да, возможно установить 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 и т.д.).

  • 0
    Должен ли я создать XML-макет для каждого из моих экранов в приложении? Как связать экран с его макетом XML?
  • 1
    Когда вы говорите экран, вы, вероятно, имеете в виду активность. Обычно вы создаете один макет XML для каждого действия и устанавливаете его с помощью setContentView ().
Показать ещё 5 комментариев
0

Да, после использования setContentView() можно добавлять виджеты. Также можно раздувать XML-макеты самостоятельно, используя LayoutInflater.

Вы можете добавить виджет загрузки в макет, который был определен внутри вашего XML, используя его, используя findViewById, а затем используя метод из ViewGroup.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню