読者です 読者をやめる 読者になる 読者になる

fresh digitable

セミコロンたちが躍動する おいらのコードを 皆さんに 見せたいね

TextViewをextendsする

TIL Android

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