2012-02-02 10 views
15

私は自分のレイアウトから使用するアクセントの色を持っています。 TextViewに適用するスタイルとして定義しました。テーマに基づいて色を設定する

私のアプリケーションでは、ユーザーは暗いテーマと明るいテーマを選択できます。私は選択されたテーマに基づいてアクセントの色を調整したいと思います。あなたはあなたがバージョンのため、またはできてあなたが(テーマに基づいてリソースを分離することはできませんテーマ

  • に基づいて状態リストの色を定義することはできませんテーマ
  • で色を定義することはできません

    • 画面サイズ)
    • あなたは、私が選択したテーマに基づいて、私のアクセントカラーを制御する必要がありますどのよう

    (???ない100%この???上の)コードからリソースの色を更新することはできませんか?

    devガイドは、私が望むものに近いカスタムカラーを使用したテーマの例です。私は実行時に色を変更できる必要があります。私は自分のコードとこのスタイルが使われているXの場所に入ることができることを知っています。コンポーネントをフェライト化して色を設定することができました。しかし、私はスタイル/テーマのいくつかの組み合わせでこれを達成できると思います。

    おかげ

  • 答えて

    0

    私はこれがandroid.widget.TextViewのサブクラスを作成することによって解決された方法。私はTextViewAccentedとTextViewWarningを作成しました。アクセントや警告の色が必要なXMLで、これらのTextViewを使用します。私はXMLから任意の色の参照を削除します。

    サブクラスには、3つのデフォルトコンストラクタが含まれています。 3つのコンストラクタはすべて、setColor()というプライベートメソッドを呼び出します。 setColor()は選択されたテーマを検査し、現在選択されているテーマに基づいて目的のシェードを使用できます。

    これはかなりクリーンなメカニズムですが、これをテーマでコーディングすることはできないとは考えにくいです。それはまさにテーマがどんなものなのかと思われます。

    23

    私は同じ質問で苦労しましたが、あなたが近づいたのと似たようなことをやろうとしていましたが、私もhereという以下の解決策を見つけました。

    まずあなたががあるようですあなた

    レイアウトで

    <style name="AppTheme.MyLight" parent="android:Theme"> 
        <item name="titleColor">#FFFFFF</item> 
        <item name="introColor">#FFFFAA</item> 
    </style> 
    
    
    <style name="AppTheme.MyDark" 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> 
    

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
    
    <attr name="titleColor" format="reference|color" /> 
    <attr name="introColor" format="reference|color" /> 
    
    </resources> 
    

    次のattr.xmlでカスタムカラーフィールドを定義アトリビュートの使用に関する正式なアンドロイドのドキュメントには説明がありません。私が見つけたベストリソースはhereです。

    関連する問題