5

カスタム テーマを含むアプリケーションがあり、それを他のアプリケーションと共有したいと考えています。アイデアは、このアプリケーションが他のアプリケーションにテーマを提供することです。

テーマは、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>

2 番目のアプリからこのテーマを取得するには:

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」メソッドが次のように述べているためです。

テーマ other と同じ内容を保持するようにこのテーマを設定します。これらのテーマが両方とも同じ Resources オブジェクトからのものである場合、この関数が戻った後は同じになります。それらが異なるリソースからのものである場合、共通のリソースのみがこのテーマに設定されます。

他のアプリケーションのリソースからテーマをコピーする方法を知っている人はいますか?? テーマは画像などのリソースを使用しません...値のみを使用します。

ありがとう ;)

4

0 に答える 0