Я новичок в разработке Android, и я буду разрабатывать одно приложение для Android. В этом приложении я хочу динамически генерировать xml-макет. После входа в приложение сервер отправит шаблон xml с описанием элементов управления, включая различное описание атрибутов (валидации на каждый элемент управления, maxlength, размер элемента управления и т.д.), Что означает, что не будет предопределенного макета xml.
Мой план состоит в том, что из загруженного шаблона xml я создам xml-макет и сохраняю этот xml в базе данных sqlite. Когда пользователь нажимает на запись, я хочу показать эту динамически созданную форму пользователю.
Можно ли изменить xml-макет (например, установить innerxml)?
Вы могли бы попробовать что-то вроде этого:
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View myView = inflater.inflate(myXmlPullParser, null);
setContentView(myView);
На основе Просмотр документации:
Важно. По соображениям производительности просмотр инфляции зависит от предварительной обработки XML файлов, которые выполняются во время сборки. Поэтому в настоящее время невозможно использовать LayoutInflater с XmlPullParser поверх обычного XML файла во время выполнения.
Вы не можете раздувать макет, если он не находится внутри каталога layout res.
LayoutInflater.inflate()
. Однако этот метод не принимает динамически загруженный. Это должно быть из папки res
. Мой вывод таков: вы все еще не можете этого сделать.
если вы настаиваете на этом, вы должны проанализировать полученный XML файл в своей программе и программно добавить каждый вид XML-макета на основе того, как он запрашивается в полученном файле
Я считаю, что вместо динамического создания xml вы должны смотреть на создание программ, которые вы хотите программно. Если это расширенное представление, которое вы должны сделать, как предложил TheWAlkingCube, раздуйте представление xml динамически.
Android не поддерживает ваш способ работы полностью, но вы можете динамически создавать свой собственный макет.
Создайте свой собственный класс TemplateBuilder. Этот класс получит файл макета с вашего сервера (и, возможно, сохранит его в вашей базе данных). Файл XML можно прочитать, и вы можете добавить каждый определенный элемент во время выполнения. Как уже говорилось ранее, это не обычный способ работы на Android, но это будет ваш лучший вариант.
Если у вас есть определенные группы представлений или макеты, которые будут использоваться в макетах чаще, вы можете определить их как файлы XML в своих разрешениях -folder и раздуть их, когда это необходимо. Создание предопределенных блоков макета, которые вы можете раздувать, когда захотите, и буквально создавать свой собственный макет.
Для примера добавления представления во время выполнения вы можете перейти по ссылке ниже: http://www.dreamincode.net/forums/topic/130521-android-part-iii-dynamic-layouts/
это возможно. Сделайте один макет xml только с линейным макетом и в onCreate получите доступ к макету с идентификатором и создайте все представления программно и добавьте линейный макет в виде подзонов, а затем установите этот макет xml как setContentView. позже вы хотите добавить больше просмотров после просмотра, вы можете запустить поток пользовательского интерфейса и добавить представления.