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