2012-01-06 15 views
1

これはどうやって解決するのが問題なのですか? 現在、さまざまなテーマのアプリケーションをコーディングしています。異なるスタイル)。 次に、リストアイテムが選択されましたsetTheme(R.style.Own_App_Style0);に電話して、完全な外観を変更したいと思います。カスタムスタイルで定義された異なるTextviewの異なるフォーマット

この問題は、例で最もよく説明されています。 2つのTextViewがあるとします。

テーマ1 1. TextView:TextColorは緑色で、TextSize 15sp。 2. TextView:TextColorは赤とTextSize 10spにする必要があります。

テーマ2 1. TextView:TextColorは青色で、TextSize 10sp。 2. TextView:TextColorは黄色で、TextSizeは10spです。

もちろん、私は<item name="textViewStyle">@android:style/Widget.TextView</item>を設定することで、TextViewsのデフォルトの外観を変更できることを知っています。 しかし、適用されたスタイル(xml)が異なるTextViewの2つ(またはそれ以上)の異なるタイプを言うことができますか?

+0

この質問への答えを参照してください。 excactly http://stackoverflow.com/questions/4630440/how-to-change-a-textviews-style-at-runtime – elijah

+0

ません。私は後でプログラムのsetTheme(R.style.OwnAppStyle)だけを呼び出したいと思います。完全なレイアウトを変更します。別々のウィジェットを変更しても問題が発生しない。私はこれを質問に加えました。 – KarlKarlsom

答えて

1

解決策が見つかりました(基本的にはこの回答setTextAppearance through code referencing custom attribute)。場合、誰がこの問題を持って、私はすぐに説明します。style.xml属性でと実際のスタイル定義で

宣言は、この属性に値(基準)をasign:

<declare-styleable name="CustomTextView"> 
    <attr name="mainTextView" format="reference"/>    
</declare-styleable> 

<style name="appstyle0" parent="android:style/Theme.Holo.Light"> 
    <item name="@attr/mainTextView">@style/CustomTextViewAppearance1</item> 
    <item name="android:textViewStyle">@style/CustomTextViewAppearance2</item> 
</style> 

<style name="appstyle1" parent="android:style/Theme.Holo.Light"> 
    <item name="@attr/mainTextView">@style/CustomTextViewAppearance2</item> 
    <item name="android:textViewStyle">@style/CustomTextViewAppearance1</item> 
</style> 
<style name="CustomTextViewAppearance1"> 
    <item name="android:textSize">10dip</item> 
</style> 
<style name="CustomTextViewAppearance2"> 
    <item name="android:textSize">30dip</item> 
</style> 

今、レイアウト内のすべてのtextViewsは、これはこのスタイルで標準として設定されているため(CustomTextViewAppearance2のようなものと定義に他のスタイルのライトを使用する必要がありtextViews:。

 <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="blablabla" 
      style="?mainButtonTextView"/> 

今.setTheme(後の活動を再開)外観を呼び出すとテキストビューのスイッチ。このメソッドのように、さまざまな種類のViewスタイルを定義し、.setThemeを呼び出すことによってのみそれらのスタイルを切り替えることができます。

+0

ありがとう、それは私を助ける!最初に「セレクタ」のようなものがあると思っていました。 10dip – dalf

0

残念ながら、スタイルは定義されると静的です。プログラム全体でスタイルのカスケード全体を変更するには、スタイル自体の定義を変更する必要があります。代わりに、上記の私のコメントにリンクされている質問に概説されているように、TextView(またはスタイル可能オブジェクト)に割り当てられたスタイルを変更するだけです。

関連する問題