У меня есть макет, определенный в 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(...)
Но ни один из них не работал нормально.
android
android-layout
layout-inflater
android-inflate
Михал Димел
источник
источник
Вы раздуваете ресурс XML. Смотрите документ LayoutInflater .
Если ваш макет находится в mylayout.xml , вы должны сделать что-то вроде:
источник
Хоть и поздний ответ, но хотелось бы добавить, что один из способов получить это
где
item
родительский макет, где вы хотите добавить дочерний макет.источник
R
ресурсы как ссылки на объект, они простоint
s. Вы должны использоватьfindViewById
передачуR
ресурса, а затем набрать приведение к нужному объекту. Затем вы можете использовать его в вызовах функций, какinflate
. (то естьViewGroup item = (ViewGroup) findViewById(R.layout.activity_layout);
... тогда вы можете использоватьitem
как выше.)RelativeLayout
вместоViewGroup
этого в моем примере выше, поскольку вы не можете создать экземпляр базового классаViewGroup
. 5-минутное правило редактирования получило меня. LOLПолезно добавить к этому, несмотря на то, что это старый пост, что для добавления дочернего представления, раздуваемого из xml, к макету группы просмотра, необходимо вызвать inflate, чтобы понять, к какому типу группы просмотра оно относится. быть добавленным к. Подобно:
Метод inflate довольно перегружен и описывает эту часть использования в документах. У меня была проблема, когда одно представление, накаченное из xml, не выравнивалось в родительском элементе должным образом, пока я не сделал этот тип изменений.
источник
Еще проще использовать
источник
View.inflate()
является лучшим способом, никакого ненужногоLayoutInflater
илиgetSystemService(Context.LAYOUT_INFLATER_SERVICE)
или какой - либо из всех этих неудобств! : Dинфляция макета
источник
Если вы не в деятельности, вы можете использовать статический
from()
метод изLayoutInflater
класса, чтобы получитьLayoutInflater
, или запросить службу из метода контекстаgetSystemService()
тоже:(Я знаю, что это почти 4 года назад, но все же стоит упомянуть)
источник
Если вы хотите добавить один просмотр несколько раз, то вы должны использовать
Если вам нравится
и
тогда будет выброшено исключение из всех готовых добавленных видов.
источник
AttachToRoot установлен в True
Просто подумайте, что мы указали кнопку в файле макета XML с шириной макета и высотой макета, равными match_parent.
В этом событии нажатия кнопки мы можем установить следующий код для раздувания макета в этом действии.
Надеюсь, что это решение работает для вас.
источник
Попробуйте этот код:
источник
У меня было самое сложное время с этой ошибкой из-за моих уникальных обстоятельств, но в конце концов я нашел решение.
Моя ситуация: я использую отдельное представление (XML), которое содержит, а
WebView
затем открывается,AlertDialog
когда я нажимаю кнопку в моем основном представлении деятельности. Но так или иначеWebView
принадлежал к основному виду деятельности (вероятно, потому что я извлекаю ресурс отсюда), поэтому прямо перед тем, как я назначил его своемуAlertDialog
(как представление), я должен был получить родительский из моихWebView
, положить его вViewGroup
, затем удалите все взгляды на этоViewGroup
. Это сработало, и моя ошибка ушла..... позже, после того как я загрузил свой
WebView
....источник
Если вы пытаетесь прикрепить дочернее представление к RelativeLayout? Вы можете сделать, следуя
источник
С Kotlin вы можете использовать:
источник
Я использовал приведенный ниже фрагмент кода для этого, и он работал для меня.
источник