AppCompatButton 子类具有透明背景
AppCompatButton subclass has transparent background
我创建了一个带有默认灰色背景颜色按钮的布局,
<Button ... />
但是如果我创建自定义按钮 class,
<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);
}
}
不知道为什么。
很难说没有你的布局 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)
并错过了默认样式的贡献。
我创建了一个带有默认灰色背景颜色按钮的布局,
<Button ... />
但是如果我创建自定义按钮 class,
<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);
}
}
不知道为什么。
很难说没有你的布局 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)
并错过了默认样式的贡献。