Трудно сказать без вашего макета XML, но я думаю, что это случай с телескопическими конструкторами.Вместо того, чтобы звонить this(context, attrs, 0)
и т. Д., Звоните super
напрямую.Может случиться так, что вы не можете выбрать стиль кнопки по умолчанию.Ваш MyButton
должен выглядеть следующим образом:
MyButton.java
public class MyButton extends AppCompatButton {
private static final String TAG = MyButton.class.getSimpleName();
public MyButton(Context context) {
super(context);
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
Посмотрите два конструктора в AppCompatButton.java
:
public AppCompatButton(Context context, AttributeSet attrs) {
this(context, attrs, attr.buttonStyle);
}
public AppCompatButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(TintContextWrapper.wrap(context), attrs, defStyleAttr);
...other stuff...
}
Конструктор AppCompatButton(Context context, AttributeSet attrs)
включает defStyleAttr
из attr.buttonStyle
.Когда вы звоните super(context,attrs)
, вы получите этот стиль.Когда вы строите телескоп, вы на самом деле звоните AppCompatButton(context, attrs, 0)
и пропускаете вклад стиля по умолчанию.