Создание / использование исполняемого макета XML в Android

В настоящее время я работаю над проектом, который требует, чтобы я использовал XML-документ для визуализации формы на устройстве Android. Форма должна быть отображена и отображена во время выполнения. Мне интересно, есть ли способ пометить форму XML, преобразовать ее с помощью XSLT в XML-формат Android, а затем отобразить его.

Solutions Collecting From Web of "Создание / использование исполняемого макета XML в Android"

К сожалению, вы не можете просто клонировать LayoutInflater или использовать другие подобные трюки, чтобы сделать это – инфляция макета полностью зависит от конструкторов вида, которые принимают аргумент AttributeSet, которые полностью зависят от метода Context.obtainStyledAttributes, который сам полностью зависит от С предварительно обработанным двоичным XML-файлом, чтобы иметь возможность эффективно разрешать атрибуты.

Альтернативный подход, который вы можете изучить, – использовать инструмент aapt (или, скорее, взломанную его версию) на вашем сервере, чтобы скомпилировать созданные вами макеты в соответствующие данные. К сожалению, в настоящее время у нас нет способа скомпоновать XmlPullParser из необработанного двоичного блоба (он должен получить этот blob из AssetManager), поэтому с этим подходом будет выполняться достаточная работа как на клиенте, так и на сервере. Я подозреваю, что можно придумать что-то довольно аккуратное, но это будет много работы.

Android содержит только встроенный способ «раздуть» формат XML, хранящийся в качестве ресурса макета в файле APK. Если вы хотите «раздуть» подобный (или другой) XML из других источников, вам придется реализовать это самостоятельно, возможно, клонируя некоторую логику из класса LayoutInflater .

Метод LayoutInflater.inflate будет принимать XmlPullParser в качестве аргумента, поэтому все, что вам нужно сделать, – это загрузить свой динамически созданный XML в PullParser и передать его в инфлятор.