可重复使用的按钮

时间:2016-12-20 17:49:22

标签: java android android-layout

我试图通过扩展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>

2 个答案:

答案 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();
    }