Подкласс AppCompatButton имеет прозрачный фон - PullRequest
0 голосов
/ 07 декабря 2018

Я создал макет с кнопкой, которая по умолчанию отображается с серым цветом фона,

<Button ... />

, но затем, если я создаю пользовательский класс кнопок,

<com.project.MyButton ... />

фонкоторый раньше был серым, становится прозрачным.

public class MyButton extends AppCompatButton {

    private static final String TAG = MyButton.class.getSimpleName();

    public MyButton(Context context) {
        this(context, null);
    }

    public MyButton(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

Не знаю почему.

1 Ответ

0 голосов
/ 07 декабря 2018

Трудно сказать без вашего макета 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) и пропускаете вклад стиля по умолчанию.

...