Создание / использование сгенерированного во время выполнения макета XML в Android - PullRequest
11 голосов
/ 21 декабря 2009

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

Ответы [ 3 ]

12 голосов
/ 22 декабря 2009

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

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

6 голосов
/ 21 декабря 2009

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

0 голосов
/ 21 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...