Создание / использование сгенерированного во время выполнения макета XML в Android
В настоящее время я работаю над проектом, который требует от меня использования XML-документа для визуализации формы на устройстве Android. Форма должна быть загружена и отображена во время выполнения. Мне интересно, есть ли способ пометить форму XML, преобразовать ее с помощью XSLT в XML-макет Android, а затем заставить устройство ее визуализировать.
3 ответа
К сожалению, вы не можете просто клонировать LayoutInflater или использовать другие подобные приемы, чтобы сделать это - инфляция макета полностью зависит от конструкторов представления, которые принимают аргумент AttributeSet, которые полностью зависят от метода Context.obtainStyledAttributes, который сам полностью зависит от наличие предварительно обработанного двоичного XML-файла, позволяющего выполнять достаточно эффективное разрешение атрибутов.
Альтернативный подход, который вы можете исследовать, - это использовать инструмент aapt (или, скорее, взломанную версию) на вашем сервере, чтобы скомпилировать созданные вами макеты в соответствующие данные. К сожалению, в настоящее время у нас нет способа спроектировать XmlPullParser из необработанного двоичного двоичного объекта (он должен получить этот BLOB-объект из AssetManager), поэтому с этим подходом необходимо выполнить довольно много работы как на клиенте, так и на сервере. Я подозреваю, что можно придумать что-то довольно аккуратное, но это будет много работы.
Android содержит только встроенный способ "раздувать" макет XML, сохраненный как ресурс макета в файле APK. Если вы хотите "накачать" похожий (или другой) XML из других источников, вам придется реализовать это самостоятельно, возможно, путем клонирования некоторой логики из LayoutInflater
учебный класс.
Метод LayoutInflater.inflate примет XmlPullParser в качестве аргумента, поэтому все, что вам нужно сделать, это загрузить динамически созданный XML в PullParser и передать его в инфлятор.