Когда вы добавляете свой пользовательский View
из xml
как:
<com.mypack.MyView
...
/>
вам потребуется открытый конструктор MyView(Context context, AttributeSet attrs),
, в противном случае вы получите Exception
, когда Android
попытается inflate
вашего View
.
А когда вы добавляете View
из xml
, а также укажите android:style
attribute
, например:
<com.mypack.MyView
style="@styles/MyCustomStyle"
...
/>
вам также понадобится третий публичный конструктор MyView(Context context, AttributeSet attrs,int defStyle)
.
Третий конструктор обычно используется, когда вы расширяете стиль и настраиваете его, а затем вы хотите установить для style
значение View
в ваших макетах
Изменить сведения
public MyView(Context context, AttributeSet attrs) {
//Called by Android if <com.mypack.MyView/> is in layout xml file without style attribute.
//So we need to call MyView(Context context, AttributeSet attrs, int defStyle)
// with R.attr.customViewStyle. Thus R.attr.customViewStyle is default style for MyView.
this(context, attrs, R.attr.customViewStyle);
}
Смотрите это