この回答はhereと共有されていますが、これは独自の会話スレッドを持っているため、ここでも関連性があります。
この問題の解決策は1つではありませんが、これは私の使用例ではうまくいきました。問題は、 'View(context、attrs、defStyle)'コンストラクタが実際のスタイルを参照していないことです。属性が必要です。そこで、我々は以下となります。
- あなたは
- が私たちのテーマにその属性のスタイルを適用します
- その属性
で私たちのビューの新しいインスタンスを作成して使用するスタイルを作成し、属性
- を定義します
で '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 /値/スタイル。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) {
super(context, null, R.attr.customTextView);
}
}
を受け取ることになります
異なるバリアントや異なる場所でcustomTextViewを繰り返し使用していましたが、ビューの名前がスタイルや属性などと一致する必要はありません。また、このテクニックは、TextViewsだけでなく、カスタムビューでも機能するはずです。
私はプログラムでビューをインスタンス化していません。そのカスタムビューは私がLinearLayoutを拡張して作成しました...私は代わりにユーザーがstyle = "@ style/..."を使用させるようにしたいと思いますが、私はプログラムでスタイルを適用したいと思いますが、この既存のスタイルから属性によってプログラムで属性を適用します。 – Thiago
"ビューをプログラマ的にインスタンス化する場合は、defStyleコンストラクタパラメータで任意のスタイルリソースを使用できます。 これを実行しましたか? 私は問題を抱えていて、これを見つけて検索しました。 http://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&group==sort=&id=12683 – sadaf