2011-02-19 8 views
19

私はRedとGreenというスタイルを持っていますが、どのスタイルを適用するかを知るためのif文がありますが、実際にJavaからスタイルを適用するコードはわかりません。プログラムでスタイルを適用するにはどうすればよいですか?

+6

正確な複製:http://stackoverflow.com/questions/2016249/how-to-programmatically-setting-style-attribute- in-a-view、http://stackoverflow.com/questions/3246447/how-to-set-the-style-attribute-programmatically-in-androidなど –

+0

に問い合わせる前に検索してください。 http://www.anddev.org/view-layout-resource-problems-f27/how-to-programmatically-set-button-style-t8656.htmlこれが役に立ちます –

答えて

5

これは、Java内部からビューを作成する場合にのみ実行可能であることがわかりました。 XMLの前に定義されている場合、スタイルを動的に変更することはできません。

+5

これはどのようにあなた自身の質問に答えますか? –

12

setTextAppearance(context、resid)メソッドを使用して、TextViewsにプログラムでスタイルを適用することは可能です。 (スタイルのresIdはR.style.YourStyleNameにあります)

31

この問題の解決策は1つありませんが、これは私の使用事例で役に立ちました。問題は、 'View(context、attrs、defStyle)'コンストラクタが実際のスタイルを参照していないことです。属性が必要です。そこで、我々は以下となります。

  1. あなたは
  2. が私たちのテーマにその属性のスタイルを適用します
  3. その属性
  4. で私たちのビューの新しいインスタンスを作成して使用するスタイルを作成し、属性
  5. を定義します

で 'RES /値/ attrs.xml'、新しい属性を定義:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="customTextViewStyle" format="reference"/> 
    ... 
</resources>  
をRES /値/のstyles.xmlに

は、 '私は私が私のカスタムのTextViewに使用するスタイルを作成するつもりです

<style name="CustomTextView"> 
    <item name="android:textSize">18sp</item> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:paddingLeft">14dp</item> 
</style> 

で 'RES /値/ themes.xml' または' のres /値/ styles.xml」、アプリケーション/活動のテーマを変更し、次のスタイルを追加します。

<resources> 
    <style name="AppBaseTheme" parent="android:Theme.Light"> 
     <item name="@attr/customTextViewStyle">@style/CustomTextView</item> 
    </style> 
    ... 
</resources> 

最後に、カスタムのTextViewに、あなたは今、属性とコンストラクタを使用することができ、それがあなたのスタイルを受け取ることになります。ここでは、代わりにこれらの構成要素のすべてでは常に

public class CustomTextView extends TextView { 

    public CustomTextView(Context context, int styleAttribute) { 
     super(context, null, styleAttribute); 
    } 

    // You could also just apply your default style if none is given 
    public CustomTextView(Context context) { 
     super(context, null, R.attr.customTextViewStyle); 
    } 
} 

の、あなたは今、あなたが

CustomTextView ctv; 
if(useCustomStyles == true){ 
    ctv = new CustomTextView(context, R.attr.customTextViewStyle); 
}else{ 
    ctv = new CustomTextView(context, R.attr.someOtherStyle); 
} 

を好むスタイルで、実行時に新しいビューを生成するためのif/else文を行うことができますそれは私がいることは注目に値します異なるバリアントや異なる場所でcustomTextViewを繰り返し使用しましたが、ビューの名前がスタイルや属性などと一致する必要はありません。また、このテクニックは、TextViewsだけでなく、カスタムビューでも機能するはずです。

+0

''が動作しなかったので、 '@ attr'を削除する必要がありましたので、' ' – virhonestum

0

プットこのコード

super.setStyle(R.style.yourownstyle) 

前にsetContentView()のonCreateで