XML-парсер для динамической компоновки (динамически загруженные скины)

Я хочу написать приложение, где (по крайней мере на данный момент) содержимое всегда одно и то же, но макет загружается динамически во время выполнения на основе предпочтений пользователя. По сути, я хочу, чтобы приложение применило «скин», который может выглядеть совершенно иначе, чем другие скины.

Я нашел несколько руководств с использованием SAXparser: http://www.androidpeople.com/android-xml-parsing-tutorial-using-saxparser/ http://twigstechtips.blogspot.com/2010/12/android-how-to-parse -xml-string.html и может себе представить что-то с нуля, которое распознает все стандартные теги макета XML, а затем динамически загружает каждую часть макета. Но это большая работа, чтобы сделать с нуля! Разумеется, эта функция доступна в Android, или, наверняка, кто-то написал какой-то открытый исходный код, который можно запустить в начале метода onCreate вашей деятельности, который принимает XML-файл и устанавливает ваш макет?

Я нашел аналогичный, но неудовлетворительно ответивший вопрос: как создать файл макета программно, что заставляет меня думать, что поскольку setContentView должен принимать в качестве аргумента целочисленный resourceID, тот факт, что они предварительно испечены во время компиляции, может быть проблемой. (SetContentView также может воспринимать объект View как его аргумент, но я не хочу использовать тонны операторов if и передавать его каждый объект View по одному, я хочу, чтобы какой-то код вводил XML-файл или строку xml и задавал контент Посмотреть.)

Может быть, я не в курсе. Есть ли другой способ сделать это? Я бы подумал, что важно иметь приложение с динамически загружаемыми скинами.

Благодаря!

У меня были аналогичные требования и пробовал один и тот же подход – он не работает.

В документации четко указано следующее: http://developer.android.com/reference/android/view/LayoutInflater.html

Обновить:

Поскольку OP необходимо загрузить XML-макеты, созданные во время выполнения:

Возможно, это можно сделать, создав файлы макета XML, скопировав их в фиктивный проект, создайте .apk, а затем загрузите apk на устройство.

DexClassLoader можно использовать для загрузки классов внутри apk.

Ну, андроид делает тяжелую работу для вас, но не вся работа …

Сначала все, что вам нужно забыть о разборе XML-макетов … вместо этого вы можете сделать макет скелетов, который управляет его внутренней дочерней позицией, размером и т. Д., А затем раздуть этот «скелет» xml с помощью LayoutInflater и получить экземпляр View. ..

Когда у вас есть экземпляр View, вы можете делать с ним то, что хотите, применяя предпочтения пользователей, такие как backgrouds, цвета переднего плана, положение, размеры и т. Д. …

Возможно, я не понимаю ваш вопрос, но вы можете получить любое представление, завышенное из ресурса xml во время компиляции, а затем применить другой стиль или установить другие свойства

Кажется, что невозможно загрузить макет и динамически менять скин в соответствии с документом:

Поэтому в настоящее время невозможно использовать LayoutInflater с XmlPullParser над простым XML-файлом во время выполнения; Он работает только с XmlPullParser, возвращенным из скомпилированного ресурса (файл R.something).

http://developer.android.com/reference/android/view/LayoutInflater.html