Создавайте, храните и раздувайте пользовательский макет во время выполнения - PullRequest
8 голосов
/ 05 апреля 2011

Я пытаюсь найти решение для следующей проблемы. Приложение, над которым я работаю, требует, чтобы пользователь мог создавать пользовательский интерфейс (макет простых виджетов) через пользовательский конструктор пользовательского интерфейса. Таким образом, пользователь может размещать виджеты (в основном, изображения. Но также TextViews и EditText) на холсте, перемещать их и т. Д. Пользовательский интерфейс должен храниться в базе данных для будущего использования. Итак, должен быть какой-то механизм для загрузки и раздувания этого интерфейса. Это главная проблема.

Моей первой идеей было положиться на стандартный механизм разметки Android. К сожалению, LayoutInflater работает с XML, скомпилированным в двоичную форму. И, насколько я знаю, невозможно скомпилировать строку XML в двоичное представление во время выполнения.

Есть ли у кого-нибудь опыт с такой проблемой? Какие-либо предложения?

1 Ответ

2 голосов
/ 05 апреля 2011

Проверьте методы надувания LayoutInflater . Вы можете фактически дать ему любой XmlPullParser для использования в качестве источника, который, в свою очередь, может быть создан с учетом любого Reader.

Другими словами, вы можете использовать практически любой поток символов в качестве источника XML для надувания.

Начало документов XmlPullParser дает базовую схему создания парсера по запросу:

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader("<foo>Hello World!</foo>"));

Обновление - это не сработает, как указано в LayoutInflater документах.

...