2011-06-23 11 views
1

基本的には、私はskinというテーマで別のレイアウトを使用したいと思います。このサイトの多くの例とエントリーは、この問題の周りで少し踊っているようですので、私はそれができることを完全には確信していません。あるいは、私はそれを手に入れません。アンドロイドでテーマをテーマにスタイルをカスケードするには

ここにその概念があります。

私は、彼らが「サッカー」や「野球」のテーマ、および指定された<TextView>要素にしたいと言っても、ユーザーが欲しいアプリが「SportTheme」 のそれらをデフォルトた。..さんは、私のアプリは、スポーツ関連のあるとしましょうactivityに適用された全体的なテーマを考えれば、テキスト(デフォルトは「スポーツ」)を「サッカー」または「野球」に変更したいですか? activityA.javaで

のstrings.xmlで

<string name="label_sport">Sport</string> 
<string name="label_football">Football</string> 
<string name="label_baseball">Baseball</string> 

- ここで重要なのは、テーマが(あまりにも、またはアプリケーションで結構です)活性のために設定されていることです。 layout_a.xmlで

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    Log.d(TAG, "onCreate"); 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.layout_a); 

    switch (user.ThemePreference) 
    { 
     case FOOTBALL_THEME: 
      this.setTheme(R.style.FootballTheme); 
      break; 
     case BASEBALL_THEME: 
      this.setTheme(R.style.BaseballTheme); 
      break; 
     default: 
      this.setTheme(R.style.SportTheme); 
      break; 
    } 
} 

... 
<TextView 
    android:id="@+id/tvSport" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:text="@string/label_sport" 
    android:style="@style/SportLabel"></TextView> 

私はテーマ/スタイルで何をしますか?このようなもの?ここで重要なのはTextViewのテキストです。私は、アプリケーション全体でいくつかの異なるアクティビティで同じtextViewを使用します。あなたは私はあなたを助けるかもしれThemesに関するブログ記事を書いた

答えて

6

テーマでUIをカスタマイズするには、テーマ内でカスタマイズする属性を定義し、レイアウトでこれらの属性への参照を使用する必要があります(例:attr/backgroundColor)。 attrs.xmlのstyles.xmlthemes.xml

は、この目的のために使用されているAndroidのソースで3つのファイルがあります。カスタマイズのためにカスタム属性が必要な場合は、attrs.xmlに宣言する必要があります。あらかじめ定義されたAndroid属性のみを使用する場合は、このファイルを作成する必要はありません。

<declare-styleable name="SportTheme"> 
    <attr name="customAttribute" format="color" /> 
    <attr name="sportLabelStyle" format="reference" /> 
</declare-styleable> 

のstyles.xmlファイルは、属性値のセットを定義するために使用されています。たとえば、ウィジェットごとに異なるスタイルセットを定義することができます。

<style name="Widget.TextView.SportLabel" parent="@android:style/Widget.TextView"> 
    <item name="android:textColor">@android:color/white</item> 
    <item name="android:textSize">20sp</item> 
</style> 

themes.xmlをカスタマイズするために使用される主なファイルです。すべてのテーマは通常、このファイルで定義されます。いくつかの方法で何かをカスタマイズすることができます。たとえば、テーマにデフォルト値を定義し、それをレイアウトから参照することができます。また、スタイルへの参照を定義することもできます。スタイルがandroid名前空間なしで使用されている

<style name="Theme.FootballTheme" parent="@android:style/Theme"> 
    <!-- define value for predefined Android attribute --> 
    <item name="android:colorBackground">@android:color/white</item> 
    <!-- define value for custom attribute --> 
    <item name="customAttribute">@android:color/black</item> 
    <!-- define reference to a style --> 
    <item name="sportLabelStyle">@style/Widget.TextView.SportLabel</item> 
</style> 

layout.xml

<TextView 
    android:background="?android:attr/colorBackground" 
    android:textColor="?attr/customAttribute" 
    style="?attr/sportLabelStyle" /> 

注意してください。それはタイプミスではありません。

あなたがテーマを使用してレイアウトをカスタマイズしたいのであれば、あなたはいくつかのテーマを作成し、属性のデフォルト値を定義し、セット(スタイル)を属性と

?[android:]attr/attributeName 

を使用して、これらの値を参照することができますが困難に聞こえるが、それは本当にありません。スタイリングの例としてAndroid resourcesを使用できます。

ご不明な点がある場合は、質問してください。

+0

ああ!私の主なキーは "style ="?attr/sportLabelStyle "!:) THX! – Jona

0

を提供することができる任意の洞察力のための

<theme name="SportTheme" parent="android:Theme" /> 

<theme name="FootballTheme" parent="SportTheme"> 
    <item name="android:background">@color/brown</item> 
</theme> 

<theme name="BaseballTheme" parent="SportTheme"> 
    <item name="android:background">@color/green</item> 
</theme> 


<theme name="SportTheme.SportLabel"> 
    <item name="android:text">@string/label_sport</item> 
</theme> 

<theme name="FootballTheme.SportLabel"> 
    <item name="android:text">@string/label_football</item> 
    <item name="android:textColor">@color/black</item> 
</theme> 


<theme name="BaseBallTheme.SportLabel"> 
    <item name="android:text">@string/label_baseball</item> 
    <item name="android:textColor">@color/white</item> 
</theme> 

感謝。テーマ設定可能なカスタムコントロールを作成する方法を説明する一連の記事、Custom Controlsもあります。これは、Androidテーマの仕組みに関する追加情報を提供します。

関連する問題