Как надуть один вид с макетом - PullRequest
207 голосов
/ 25 февраля 2010

У меня есть макет, определенный в XML. Содержит также:

<RelativeLayout
    android:id="@+id/item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

Я хотел бы накачать этот RelativeView другим файлом макета XML. Я могу использовать разные макеты в зависимости от ситуации. Как я должен это делать? Я пробовал разные варианты

RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)

Но ни один из них не работал нормально.

Ответы [ 16 ]

369 голосов
/ 25 февраля 2010

Я не уверен, что следил за вашим вопросом. Вы пытаетесь прикрепить дочернее представление к RelativeLayout? Если это так, вы хотите сделать что-то вроде:

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);
101 голосов
/ 25 февраля 2010

Вы раздуваете ресурс XML. См. Документ LayoutInflater .

.

Если ваш макет находится в mylayout.xml , вы должны сделать что-то вроде:

View view; 
LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);

RelativeLayout item = (RelativeLayout) view.findViewById(R.id.item);
25 голосов
/ 04 мая 2011

Хоть и поздний ответ, но хотел бы добавить, что один из способов получить это

LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.mylayout, item );

где item - родительский макет, в который вы хотите добавить дочерний макет.

18 голосов
/ 02 июня 2010

Полезно добавить к этому, несмотря на то, что это старый пост, что для добавления дочернего представления, раздуваемого из xml, к макету группы просмотра, необходимо вызвать inflate с подсказкой, какой тип группы просмотра это будет добавлено к. Как:

View child = getLayoutInflater().inflate(R.layout.child, item, false);

Метод inflate довольно перегружен и описывает эту часть использования в документах. У меня была проблема, когда одно представление, накаченное из xml, не выровнялось в родительском элементе должным образом, пока я не внес изменения такого типа.

10 голосов
/ 02 сентября 2015

Еще проще использовать

View child = View.inflate(context, R.layout.child, null)
item.addChild(child) //attach to your item
8 голосов
/ 11 апреля 2016

инфляция макета

View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);
6 голосов
/ 07 февраля 2014

Если вы не в деятельности, вы можете использовать статический метод from() из класса LayoutInflater, чтобы получить LayoutInflater, или запросить службу у метода контекста getSystemService() тоже:

LayoutInflater i;
Context x;       //Assuming here that x is a valid context, not null

i = (LayoutInflater) x.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//OR
i = LayoutInflater.from(x);

(я знаю, что это почти 4 года назад, но все же стоит упомянуть)

4 голосов
/ 19 октября 2015

Проверьте эту ссылку. У него есть ответ-> https://possiblemobile.com/2013/05/layout-inflation-as-intended/

3 голосов
/ 18 июля 2018

AttachToRoot установлен в True

Просто подумайте, что мы указали кнопку в файле макета XML, для которой ширина макета и высота макета установлены равными match_parent.

<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/custom_button">
</Button>

В этом событии нажатия кнопки мы можем установить следующий код для раздувания макета в этом действии.

LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.yourlayoutname, this);

Надеюсь, это решение работает для вас.!

3 голосов
/ 25 февраля 2015

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

   layoutInflaterForButton = getActivity().getLayoutInflater();

 for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
        FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
        btnContainer.addView(btnView);
    }

Если вам нравится

   layoutInflaterForButton = getActivity().getLayoutInflater();
    FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);

и

for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
            btnContainer.addView(btnView);
        }

тогда будет выброшено исключение всех готовых добавленных представлений.

...