Разделение ресурсов / файлов на разные apk для скиннинга - PullRequest
4 голосов
/ 19 января 2012

Я бы хотел, чтобы в моем приложении было несколько скинов. Моя основная цель состояла не в том, чтобы позволить пользователю изменить скин, а в том, чтобы я мог настроить скин для каждого клиента.

Используя стили и темы, я могу отделить информацию о скинах от макета. Он работает как шарм, но ему нужно, чтобы все скины и все их ресурсы (включая точные растровые изображения) включали приложение, которое выглядит как пустая трата драгоценного пространства, так как создается больше скинов.

Существует способ создать скрипт автоматической сборки (ant) и позволить ему решать, что включать, но по некоторым другим причинам это не является предпочтительным.

Я видел несколько приложений на рынке, которые используют отдельные файлы темы (загружаемые и устанавливаемые отдельно), поэтому я предполагаю, что перемещение этой информации в отдельный APK может быть достигнуто.

Я дошел до того, что разрешил моему приложению и поставщику скинов apk иметь один и тот же UserID, чтобы иметь больше свободного доступа друг к другу, но все еще не знает, как получить ресурсы.

Поставщик контента может быть решением, но с затратами на перенос информации макета обратно в код из XML и наличием слоя плюс с некоторыми проблемами производительности, не рекомендуется для исключительно визуального эффекта.

Какова лучшая практика для этой проблемы?

Еще одна важная информация: мне нужно использовать API уровня 7 (2.1), поэтому решения, работающие только в API более высокого уровня, выходят за рамки.

1 Ответ

1 голос
/ 14 августа 2012
    private static Resources getThemeResources(String themePackage, Context context) throws NameNotFoundException {
    try {
        return [context.getPackageManager().getResourcesForApplication(themePackage);][1]
    } catch (Exception e) {
        return null;
    }
}

Это даст вам ресурсы для указанного apk. themePackage должен быть полным пакетом темы, к которой вы пытаетесь получить доступ. контекст - это контекст вызывающей стороны, то есть контекст вашего приложения.

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