fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

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)みたいな初期化メソッドを用意して呼んでやるのがこれからは良いのだろうか。