1

私のAndroidアプリケーションでは異なるテーマをサポートしたいと思います。 テーマは2色しか異なるはずです。したがって、これらの色は、すべてのテーマのためにあります。テーマを変更するときのみ色を変更してください

  • 原色
  • 二色

私が欲しい、また、ボタンのスタイルらのような子供を持っている一つの大きなデフォルトのテーマがあると、 like(styles.xml):

<style name="DefaultTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="homeAsUpIndicator">@drawable/my_stackoverflow_arrow</item> 
    [...] 
</style> 

<style name="DefaultTheme.NoActionBar"> 
    <!-- hide action bar and title --> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

<style name="DefaultTheme.Button"> 
    <item name="android:textAllCaps">true</item> 
    <item name="android:textStyle">bold</item> 
    [...] 
</style> 

しかし、今では色を変えてテーマを変更したいと思っています。だから今

<resources> 
    <attr name="ThemeColorPrimary" format="reference" /> 
    <attr name="ThemeColorSecondary" format="reference" /> 
</resources> 

を、私はこのように上から私のstyles.xmlでこの属性を使用することができます:したがって、私はattrs.xmlファイル内のリソースを作成した

<style name="DefaultTheme.Button"> 
    <item name="android:textAllCaps">true</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textColor">?attr/ThemeColorPrimary</item> 
    [...] 
</style> 

しかし、どのように私は私の色のテーマが作成するのですか?私はこのような何かをする必要があることを知っています:

<item name="ThemeColorPrimary">@color/ThemeBluePrimary</item> 

しかしどこですか?どのテーマが継承されていますか?私は今のようなものがある場合:指定されたリソースが不足していることになるので

<activity 
    android:name="StackOverflowActivity" 
    android:screenOrientation="portrait" 
    android:theme="@style/DefaultTheme.NoActionBar" /> 

<style name="BlueTheme" parent="DefaultTheme"> 
    <item name="ThemeColorPrimary">@color/ThemeBluePrimary</item> 
    <item name="ThemeColorSecondary">@color/ThemeBlueSecondary</item> 
</style> 

<style name="GreyTheme" parent="DefaultTheme"> 
    <item name="ThemeColorPrimary">@color/ThemeGreyPrimary</item> 
    <item name="ThemeColorSecondary">@color/ThemeGreySecondary</item> 
</style> 

<style name="BlackTheme" parent="DefaultTheme"> 
    <item name="ThemeColorPrimary">@color/ThemeBlackPrimary</item> 
    <item name="ThemeColorSecondary">@color/ThemeBlackSecondary</item> 
</style> 

を私はこのようなAndroidManifest.xmlでテーマを指定することはできません。そうでなければ私はまた、これにすることはできません。

<activity 
    android:name="StackOverflowActivity" 
    android:screenOrientation="portrait" 
    android:theme="@style/BlueTheme.NoActionBar" /> 

BlueThemeは「NoActionBar」と呼ばれている子を持っていないので。

私はこれが混乱していることを知っています。私はかなり混乱しています。 どうすればこの問題を解決できますか? ありがとうございます。

答えて

1

あなたは親のテーマでこれらのカスタム属性を指定する必要があります。

<style name="DefaultTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="ThemeColorPrimary">@color/defaultPrimaryColor</item> 
    <item name="ThemeColorSecondary">@color/defaultSecondaryColor</item> 
</style> 

その後DefaultThemeのそれぞれの子供たちは、あなたのカスタム属性へのアクセスを持っているでしょうし、また、それらをオーバーライドすることができます。

<style name="BlueNoActionBarTheme" parent="DefaultTheme.NoActionBar"> 
    <item name="ThemeColorPrimary">@color/ThemeBluePrimary</item> 
    <item name="ThemeColorSecondary">@color/ThemeBlueSecondary</item> 
</style> 
:あなたは NoActionBarBlueThemeを組み合わせたい場合は

、あなたはNoActionBarテーマをサブクラス化する必要があります

関連する問題