Скопировать тему из другого приложения - PullRequest
5 голосов
/ 12 августа 2011

У меня есть приложение, содержащее пользовательскую тему, и я хочу поделиться им с другими приложениями. Идея состоит в том, что это приложение предоставляет темы для других приложений.

Тема определена в файле styles.xml следующим образом:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<style name="Text">
    <item name="android:textColor">#00FF00</item>
    <item name="android:textColorHighlight">#FFFF9200</item>
    <item name="android:textColorHint">#FFCCFF</item>
    <item name="android:textColorLink">#5C5CFF</item>
    <item name="android:textSize">16sp</item>
    <item name="android:textStyle">normal</item>
</style>

<style name="Button">
    <item name="android:background">#FF0000</item>
    <item name="android:focusable">true</item>
    <item name="android:clickable">true</item>
    <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item>
    <item name="android:textColor">#FFFF00</item>
    <item name="android:textSize">22dip</item>
    <item name="android:gravity">center_vertical|center_horizontal</item>
</style>

<style name="Theme.example" parent="android:Theme">
    <item name="android:background">#FF0000</item>
    <item name="android:buttonStyle">@style/Button</item>
    <item name="android:textAppearance">@style/Text</item>
</style>

</resources>

Чтобы получить эту тему из второго приложения:

Context appThemesContext = this.getApplicationContext().  
                           createPackageContext("com.appThemes", 
                                                 Context.CONTEXT_IGNORE_SECURITY);
appThemesContext.setTheme(0x7f050002); //The resid of the desired theme
this.getTheme().setTo(appThemesContext.getTheme()); //Copy the theme

Проблема в том, что копируются только прямые атрибуты, такие как "background", а атрибуты ссылок, такие как "buttonStyle", нет, потому что метод "setTo" говорит:

Установите эту тему так, чтобы она содержала то же содержание, что и другая тема. Если обе эти темы относятся к одному и тому же объекту Resources, они будут идентичны после возврата этой функции. Если они принадлежат разным ресурсам, в этой теме будут установлены только общие ресурсы.

Кто-нибудь знает, как скопировать тему с ресурсов другого приложения ?? Тема не будет использовать ресурсы, такие как изображения и т. Д., А только значения.

Спасибо;)

...