我试图通过扩展Button类来创建一个可重用的按钮。我只是尝试一些基本的设置背景颜色和按钮的文本。我对在扩展Button的类中调用init方法的位置/方法感到有点困惑。我知道我可以用风格设置这些字段,但我希望有一种方法可以在课堂上完成。我希望如果类中的条件确定按钮是否会从透明,颜色,形状和其他属性更改。
这是班级,
public class SVButton extends Button {
public SVButton(Context context) {
super(context);
}
public SVButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SVButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void init(Context context) {
Button SVColorButton = new Button(getContext());
SVColorButton.setBackgroundColor(ContextCompat.getColor(context, R.color.colorPrimary));
SVColorButton.setText("Push Me");
}
}
这是我调用customWidget Button的XML,
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.agar098.atomicdesigndemos.MainActivity">
<com.example.agar098.atomicdesigndemos.CustomWidgets.SVButton
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
答案 0 :(得分:1)
我认为这就是你想要的。
换句话说,你只在课堂上制作了new Button();
,你实际上没有扩展任何东西。
public class SVButton extends Button {
private Context mContext;
public SVButton(Context context) {
super(context);
this.mContext = context;
init();
}
public SVButton(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
init();
}
public SVButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext = context;
init();
}
private void init() {
this.setBackgroundColor(ContextCompat.getColor(mContext, R.color.colorPrimary));
this.setText("Push Me");
}
}
答案 1 :(得分:0)
<强> 1。如果您没有在xml中定义并直接使用下面的按钮。
final SVButton svButton = new SVButton(this);
下面的构造函数将调用
public SVButton(Context context) {
super(context);
init();
}
<强> 2。在xml中定义按钮时,如下所示
<com.example.agar098.atomicdesigndemos.CustomWidgets.SVButton
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
构造函数下方的时间将调用
public SVButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}