Что такое inflater в android
Русские Блоги
Изучение метода Inflater в LayoutInflater
В процессе изучения Android меня смущали параметры метода Inflater в LayoutInflater.Что делает эта функция? Посмотрев большое количество документов в Интернете, я все еще растерялся. Сегодня от_ Блог Jiangnan Little RainУзнал значение каждого параметра в методе Inflater. Этот блог в основном предназначен для записи и обобщения объяснения значения Inflater в различных условиях.
Метод надувания с тремя параметрами
Прототип функции
Надуватель с тремя параметрами может иметь три ситуации, поэтому мы обсудим их отдельно.
Например (пример оригинального блогера):
Схема действия выглядит следующим образом:
Пользовательский макет linearlayout.xml выглядит следующим образом:
Первая ситуация:
эффект:
Второй случай:
Эффект: такой же, как и в предыдущем случае (обратите внимание на сравнение с третьим случаем)
Ситуация третья:
эффект:
Мы можем ясно обнаружить, что его ширина и высота недопустимы, поскольку этот элемент управления не существует ни в одном контейнере. Если вы измените кнопку, она изменится немедленно, потому что кнопка находится в определенном контейнере.
Метод надувания с двумя параметрами
Прототип функции
Увидев прототип функции, легко объяснить, он просто преобразует двухпараметрический Inflater в три параметра.
Интеллектуальная рекомендация
MATLAB машинное обучение
LayoutInflater
Мы рассмотрим надувание компонентов применимо к LayoutInflater. Существует также класс MenuInflater, который использует тот же принцип.
Фрагменты тоже часто используют механизм надувания. Обратите внимание на сигнатуру метода onCreateView():
Сам механизм надувания прост и не требует особых объяснений, изучения достоин один аспект.
Вероятно, вам не раз приходилось писать/копировать такой код:
Даже у меня на сайте есть такие примеры. Недавно я заметил, что среда разработки ругается на последний параметр null.
Оказывается, это неправильно. Давайте изучать этот код.
Существует две версии метода inflate() для стандартных приложений.
В первом параметре указывается идентификатор ресурса разметки, который мы собираемся надуть. Во втором параметре указывается корневой компонент, к которому нужно присоединить надутые объекты. В третьем параметре (если он используется) указывается, нужно ли присоединять надутые объекты к корневому элементу.
LayoutInflater автоматически пытается присоединить надутые компоненты к корневому элементу. Иногда сама среда разработки может создать заготовку с использованием null, чтобы избежать возможного краха приложения. И разработчики используют предложенный вариант, хотя можно было использовать второй вариант метода с тремя параметрами.
Но давайте узнаем, чего мы лишаемся, когда используем null для корневого элемента.
Надувание компонентов часто применяется в адаптерах, когда разметка отдельного элемента списка задаётся в XML-файле, а затем динамически конвертируется в набор компонентов в методе getView():
Среда разработки заругалась. Исправим null на parent, который по названию вроде подходит под корневой элемент. Однако, запустив проект, мы получим ошибку. Йожкин кот, что мы наделали?!
Вспоминаем, что есть другая версия метода и исправляем на следующий вариант.
Пример работает, предупреждение не выводится. Но осадочек остался.
При использовании null среда разработки как-бы пытается сказать: «Я не знаю, какой элемент является родительским, поэтому прости, между нами всё кончено «, я буду использовать null.
Тогда зачем нам этот родительский элемент? На самом деле он может сыграть важную роль в различных ситуациях.
Проблемы могут возникнуть при использовании атрибутов android:layout_xxx в родительском элементе. В результате, не зная ничего о родителе, мы не можем использовать его LayoutParams и система будет игнорировать вашу разметку. А вы будете думать, что это баг.
Без LayoutParams родительский ViewGroup надует компоненты с настройками по умолчанию. И в большинстве случае это вполне работает.
Рассмотрим конкретный пример. Создадим разметку для отдельного элемента списка layout/list_item.xml.
Мы хотим использовать фиксированную высоту для каждого элемента и используем атрибут android:layout_height у родительского элемента.
Попробуем неправильный вариант.
В этом варианте игнорируется родитель и соответственно его настройки.
Результат на экране.
Теперь вам должна быть ясна разница между разными вариантами и правильный код для применения.
Но бывают случаи, когда использование null оправданно.
Одним из таких примеров является использование разметки в AlertDialog. Допустим, у нас есть код.
AlertDialog.Builder не нуждается в родительском элементе для построения диалогового окна.
Рассмотрим случаи, когда нужен true. Допустим, у нас есть отдельная разметка кнопки.
Мы можем программно присоединить кнопку к LinearLayout в активности или фрагменте.
Мы указали, что хотим надуть кнопку из его собственной разметки и присоединить полученную кнопку к LinearLayout (второй параметр). Это решение эквивалентно вызову метода с двумя параметрами.
Как вариант, можно не присоединять при надувании, а добавить программно через addView().
У файла разметки нет корневого ViewGroup и мы указываем свой собственный компонент на основе LinearLayout в качестве корневого. Если бы мы использовали в своей разметке вместо merge любой компонент, например, FrameLayout, то тогда был бы другой случай.
Что делает LayoutInflater в Android?
Что такое использование LayoutInflater в Android?
Когда вы используете пользовательский вид в ListView вы должны определить макет строки. Вы создаете xml, где вы размещаете виджеты Android, а затем в коде адаптера вы должны сделать что-то вроде этого:
Класс LayoutInflater используется для создания экземпляра XML-файла макета в соответствующие объекты View.
Другими словами, он принимает в качестве входного файла XML и строит объекты View из него.
LayoutInflater.inflate () предоставляет средство для преобразования файла res / layout / *. Xml, определяющего представление в реальный объект View, который можно использовать в исходном коде приложения.
Базовые два шага: получить надув, а затем раздуть ресурс
Как вы получаете надув?
Как вы получаете представление, предполагая, что xml-файл «list_item.xml»?
пример
Вот мини-проект, который я сделал, который показывает как LayoutInflater и findViewById в действии. Без специального кода макет выглядит так.
Синий квадрат – это настраиваемый макет, вставленный в основной макет с include (см. Здесь для большего). Он был завышен автоматически, поскольку он является частью представления содержимого. Как вы можете видеть, в коде нет ничего особенного.
Теперь давайте раздуть (создать) еще одну копию нашего пользовательского макета и добавить его.
Здесь это снова в контексте.
Обратите внимание, что findViewById используется только после того, как макет уже завышен.
Дополнительный код
Вот пример xml для примера выше.
Когда вам нужен LayoutInflater
Вот еще один пример, аналогичный предыдущему, но расширенный для дальнейшего демонстрации параметров раздувания и динамического поведения, которые он может обеспечить.
Предположим, что в вашем макете строк ListView может быть переменное количество текстовых элементов. Поэтому сначала вы раздуваете представление базового элемента (как и в предыдущем примере), а затем циклически добавляете TextViews во время выполнения. Использование android: layout_weight дополнительно полностью выравнивает все.
Вот ресурсы Layouts:
list_layout.xml
schedule_layout.xml
Переопределить метод getView в расширении класса BaseAdapter
Обратите внимание на различные вызовы метода раздувания:
Что надувает
Он принимает XML-макет в качестве ввода (скажем) и преобразует его в объект View.
Почему необходимо
Давайте рассмотрим сценарий, в котором нам нужно создать пользовательский список. Теперь каждая строка должна быть обычной. Но как мы можем это сделать. Невозможно назначить xml-макет для строки списка. Итак, мы создаем объект View. Таким образом, мы можем получить доступ к элементам в нем (textview, imageview и т. Д.), А также назначить объект как строку списка
Итак, всякий раз, когда нам нужно назначить объект типа вида где-то, и у нас есть свой собственный xml-дизайн, мы просто конвертируем его в объект с помощью надувателя и используем его.
Inflating означает чтение XML-файла, который описывает макет (или элемент GUI), и для создания фактических объектов, которые ему соответствуют, и, таким образом, сделать объект видимым в приложении для Android.
Этот файл можно сохранить как date_time_dialog.xml :
Этот файл можно сохранить как date_time_picker.xml :
Класс MainActivity сохранен как MainActivity.java :
Вот пример получения refrence для корневого представления макета, раздувания его и использования его с помощью setContentView (View view)
Layout inflater – это класс, который читает описание внешнего вида xml и преобразует их в объекты View на основе java.
Мой список настроек надеется, что он иллюстрирует концепцию
LayoutInflater является фундаментальным компонентом Android. Вы должны использовать его все время, чтобы превратить xml-файлы в иерархии представлений.
LayoutInflater создает объекты View на основе макетов, определенных в XML. Существует несколько способов использования LayoutInflater, включая создание пользовательских представлений, раздувание представлений фрагментов в представлениях Activity, создание диалоговых окон или просто раздувание файла макета View в Activity.
Есть много неправильных представлений о том, как работает инфляционный процесс. Я думаю, что это происходит из-за плохой документации для метода inflate (). Если вы хотите подробно узнать о методе inflate (), я написал здесь сообщение в блоге:
Полный список
— делаем свой вариант списка
На прошлом уроке мы узнали, зачем нужен класс LayoutInflater и сделали небольшой пример, на котором подробно рассмотрели метод inflate и его параметры. Для закрепления темы сделаем еще один, чуть более сложный пример.
Приложение будет параллельно перебирать три массива данных, создавать для каждой тройки View-элемент из layout-файла item.xml, заполнять его данными и добавлять в вертикальный LinearLayout в main.xml.
Project name: P0411_LayoutInflaterList
Build Target: Android 2.3.3
Application name: LayoutInflaterList
Package name: ru.startandroid.develop.p0411layoutinflaterlist
Create Activity: MainActivity
ScrollView обеспечит нам прокрутку списка, если все пункты не влезут в экран. А в нем LinearLayout, в который мы будем добавлять элементы.
FrameLayout, и три TextView в нем.
Кодим реализацию. MainActivity.java:
Все сохраним и запустим:
Список удался и работает прокрутка.
Урок получился короткий, но полезный. На всякий случай хочу заметить, что это еще не классический Android-список называемый List. Но этот пример значительно облегчит понимание списка. Т.к. принцип схож. Для построения List мы также должны будем предоставлять массив данных и layout-файл для пунктов. Этим и займемся на следующем уроке.
На следующем уроке:
— используем ListView для построения списка
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Что делает LayoutInflater в Android?
14 ответов
при использовании пользовательского представления в ListView необходимо определить макет строки. Вы создаете xml, где вы размещаете виджеты android, а затем в коде адаптера вы должны сделать что-то вроде этого:
LayoutInflater класс используется для создания экземпляра XML-файла макета в соответствующие объекты представления.
другими словами, он принимает в качестве входных данных XML-файл и строит из него объекты представления.
что значит LayoutInflator делать?
пример
вот мини-проект, который я сделал, который показывает оба LayoutInflater и findViewById в действии. Без специального кода, макет выглядит так.
синий квадрат пользовательский макет, вставленный в основной макет с помощью include (см. здесь для более). Он был завышен автоматически, поскольку является частью представления содержимого. Как видите, в коде нет ничего особенного.
теперь давайте надуем (создадим) еще одну копию нашего пользовательского макета и добавим ее.
вот он снова в контексте.
обратите внимание, как findViewById используется только после того, как макет уже была надута.
Дополнительный Код
вот xml для примера выше.
когда вам нужен LayoutInflater
LayoutInflater.inflate () предоставляет средство для преобразования res/layout/*.xml-файл, определяющий представление в фактический объект представления, используемый в исходном коде приложения.
основные два шага: получить инфлятор, а затем надуть ресурс
Как вы получаете inflater?
Как вы получаете представление, предполагая, что xml-файл » list_item.в XML»?
вот еще один пример, аналогичный предыдущему, но расширенный для дальнейшего демонстрации параметров раздувания и динамического поведения, которые он может предоставить.
предположим, что макет строки ListView может иметь переменное количество TextViews. Поэтому сначала вы раздуваете представление Базового элемента (как и в предыдущем примере), а затем динамически добавляете TextViews во время выполнения. Использование android: layout_weight дополнительно выравнивает все идеально.
вот ресурсы макетов:
list_layout.в XML
schedule_layout.в XML
переопределить getView адаптера метод в расширении класса BaseAdapter
Примечание различные вызовы метода раздувания:
надувание означает чтение XML-файла, описывающего макет (или элемент GUI), и создание фактических объектов, которые ему соответствуют, и, таким образом, сделать объект видимым в приложении Android.
этот файл может быть сохранен как date_time_dialog.в XML:
этот файл может быть сохранен как date_time_picker.в XML:
на MainActivity класс сохраняется как MainActivity.java:
что насос делает
Он принимает XML-макет в качестве ввода (скажем) и преобразует его в объект просмотра.
зачем это нужно
Итак, всякий раз, когда нам нужно назначить объект типа вида где-то, и у нас есть наш пользовательский дизайн xml, мы просто преобразуем его в объект с помощью надувателя и используем его.
Layout inflater-это класс, который читает описание внешнего вида xml и преобразует их в объекты представления на основе java.
мой список настроек надеюсь, что он иллюстрирует концепцию
LayoutInflater является фундаментальным компонентом в Android. Вы должны использовать его все время, чтобы превратить xml-файлы в иерархии представлений.
LayoutInflater создает объекты представления на основе макетов, определенных в XML. Существует несколько способов использования LayoutInflater, включая создание пользовательских представлений, раздувание представлений фрагментов в представления действий, создание диалоговых окон или просто раздувание представления файла макета в действие.
существует много неправильных представлений о том, как работает процесс инфляции. Я думаю, что это происходит из-за плохой документации для метода inflate (). Если вы хотите узнать о накачать() метод подробно, я написал об этом в блоге здесь: