2017-02-10 5 views
-1

は、私はすべて与えられたコンストラクタを通じてスタイル参照を渡さ:スタイル属性を使用せずにカスタムビューをスタイルする方法はありますか?

public MyCustomView(Context context) 
{ 
    super(context, null, R.style.MyStyle); 
} 
public MyCustomView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs, R.style.MyStyle); 
} 
public MyCustomView(Context context, AttributeSet attrs, int defStyle) 
{ 
    super(context, attrs, R.style.MyStyle); 
} 

私はマシュマロでこれをしようとしています。スタイルは適用されませんが、スタイル属性によって適用されると機能します。

+0

私が知っている限り、3つのコンストラクタがありません。 – Selvin

+0

は、 'this'の代わりに' super'であるとは思われません。 –

答えて

0

は、次のようにContextThemeWrapperと3つの引数のコンストラクタを使用してみてください:

MyCustomView mView = new MyCustomView(new ContextThemeWrapper(this,R.style.yourStyle),null,0); 

次のようにMyCustomViewクラスのコンストラクタにはなりますが:

public MyCustomView(Context context, AttributeSet attrs, int defStyle) 
{ 
    super(context, attrs, defStyle); 
} 

これは動作するはずです。

+0

しかし、XMLを使ってそれを行う方法は? –

+0

_Activity_または_Application's_ _theme_プロパティをオーバーライドするには、それらにカスタムスタイルを割り当てて_Activity_または_Application_全体に適用しますが、XML内で単一のビューをスタイルする場合は、これを使用して行うことができる唯一の方法ですxml(スタイル属性を設定します)。そして、それは理にかなっています、誰もこのような何か他のやり方をする方法を必要としません。 [ここで詳しく検討してください](https://developer.android.com/guide/topics/ui/themes.html) –

関連する問題