TextViewをextendsする
View
を継承して自分のカスタムビューを作ろうとする時、3種類のコンストラクタをオーバーライドしなければならない。今までは何も考えずに
public HogeView(Context context) { this(context, null); } public HogeView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public HogeView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
などとしていたが、TextView
などのandroid.R.attr.xxxStyle
があるものについては、引数が2このコンストラクタの中を
public MyCustomTextView(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.textViewStyle); }
のようにしなければならない。
TextView
はsupport-libの中にAppCompatTextView
があるのでこれを継承する。というか、他のTextView
と同じ色にならなくてなんでだろうな〜スタイルとかいじってないつもりなのにな〜とAppCompatTextView
のソースを読んでいたところこの事実に気づいた。引数3つのやつでsuper
を呼ぶより、それぞれのコンストラクタの中でsuper
を呼んで、さらにinit(Context, AttributeSet, int)
みたいな初期化メソッドを用意して呼んでやるのがこれからは良いのだろうか。