24

それに対する簡単な答えがあると確信していますが、それを見つけることができないので、それをstackoverflowに投げます... ;-)

私はそれを例に入れます。ユーザーが設定でテーマを選択できるAndroidアプリがあります-暗いテーマまたは明るいテーマ。選択したテーマに応じて、アプリで 20 色を調整する必要があります。したがって、テーマで色を定義し、このように定義された色の名前を TextViews などで使用できることを願っています。 . これらの 20 色のそれぞれに余分な暗いスタイルと明るいスタイルを定義したくありませんが、これまでのところ、私が見つけることができる唯一の解決策のようです。

ヒントをありがとう

マーティン:

アップデート:

疑似構文では、それが私が探しているものです。出来ますか?

<style name="AppTheme.MyDark" parent="android:Theme">
  -?-> titleColor = "#ffffff"
  -?-> introColor = "#ffaaaa"  
</style>

<style name="AppTheme.MyLight" parent="android:Theme.Light">
  -?-> titleColor = "#000000"
  -?-> introColor = "#004444"  
</style>


<TextView
        android:id="@+id/quoteTitle"
        android:textColor=@titleColor
        ...
</TextView>

<TextView
        android:id="@+id/quoteIntro"
        android:textColor=@introColor
        ...
</TextView>
4

1 に答える 1

83

私はうまくいくように見える解決策を見つけました。まず、attr.xmlでカスタムカラーフィールドを定義する必要があります

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

<attr name="titleColor" format="reference|color" />
<attr name="introColor" format="reference|color" />

</resources>

次に、テーマを定義します

<style name="AppTheme.MyDark" parent="android:Theme">
   <item name="titleColor">#FFFFFF</item>
   <item name="introColor">#FFFFFF</item>
</style>


<style name="AppTheme.MyLight" parent="android:Theme">
   <item name="titleColor">#000000</item>
   <item name="introColor">#004444</item>
</style>

そして最後にあなたのレイアウトで

<TextView
    android:id="@+id/quoteTitle"
    android:textColor="?titleColor"
    ...
</TextView>

<TextView
    android:id="@+id/quoteIntro"
    android:textColor="?introColor"
    ...
</TextView>

私は主にここで解決策を見つけました

属性の使用に関する公式のAndroidドキュメントには説明がないようです。私が見つけた最高のリソースはここにあります

于 2012-10-03T08:46:21.403 に答える