首先创建一个class类,列如:你的类的名字叫Myview
然后在activity_main.xml里配置:
<zhaochuang.bawei.com.myapplication.Myview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/myview" app:leftTextsize="15dp" //app是设置按钮颜色的 app:leftTextColor="@android:color/holo_blue_light" ></zhaochuang.bawei.com.myapplication.Myview> app的自定义生成,是在values下创建一个attrs,然后里面的代码如下:<resources> <declare-styleable name="Myview"> <attr name="leftTextsize" format="dimension"></attr> <attr name="leftTextColor" format="color"></attr> <attr name="leftBackground" format="reference|color"></attr> </declare-styleable> </resources>前面不是创建了一个MyView类,在类的所有代码如下:package zhaochuang.bawei.com.myapplication; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; /** * Created by zh on 2018/1/28. */ public class Myview extends FrameLayout implements View.OnClickListener{ private Button jian; private Button jia; private EditText number; private OnnumberchangedListener mListener; //接口回调 public void setOnNumberchangedListener(OnnumberchangedListener listener){ this.mListener=listener; } public Myview(@NonNull Context context) { this(context,null); } public Myview(@NonNull Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public Myview(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); View.inflate(context,R.layout.shuju,this); initView(); //通过obtainStyedAttributes获取到TypedArray数组cursor.getString getInt getDouble TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.Myview); //通过array获取到字体大小的属性值 int leftTextSize = array.getDimensionPixelSize(R.styleable.Myview_leftTextsize, 0); //通过array获取到字体的属性值 int leftTextColor = array.getColor(R.styleable.Myview_leftTextColor, 0); //背景图片 Drawable leftBackGround = array.getDrawable(R.styleable.Myview_leftBackground); array.recycle(); //判断leftTextSize大于0 减通过属性设置自的字体大小才有作用 if (leftTextSize>0){ jian.setTextSize(leftTextSize); } //判断leftTextColor大于零 jian通过属性设置的颜色属性才有作用 if (leftTextColor!=0){ jian.setTextColor(leftTextColor); } } // public Myview(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { // super(context, attrs, defStyleAttr, defStyleRes); // } private void initView(){ jian = findViewById(R.id.jian); jia = findViewById(R.id.jia); number = findViewById(R.id.ed); jian.setOnClickListener(this); jia.setOnClickListener(this); } //首先获取到数量 public int getNunberValue(){ //定义一个变量 int num=0; //文本框强转成String类型 String numberstr = number.getText().toString(); //判断是否为空 textUtils文本的意思 is是否为 Empty空的 if (TextUtils.isEmpty(numberstr)){ //如果为空就为文本框赋值 为1 num=1; } //把String类型转为int类型 返回出去 等待接收 return Integer.parseInt(numberstr); } //最小值为1时 num变化 public void setmNumberView(int num){ if (num<=0){ num=1; //当数据为1时 ,减按钮 设置为不可用 jian.setEnabled(false); }else{ //当数据不为1时 减按钮设置为可用 jian.setEnabled(true); } //设置添加的购物数量 number.setText(Integer.toString(num)); //设置接口回调 if (null!=mListener){ mListener.onchanged(num); } } //减少 每次减一 最少剪到一为止 public void doDecrease(){ //获取上面获取数量的方法 int nunberValue = getNunberValue(); nunberValue--; setmNumberView(nunberValue); } //增加 每次加一 public void doInecrease(){ int nunberValue = getNunberValue(); nunberValue++; setmNumberView(nunberValue); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.jian: doDecrease(); break; case R.id.jia: doInecrease(); break; } } //设置监听购物数量变化时的接口 public interface OnnumberchangedListener{ public void onchanged(int num); } } 如果需要用接口,直接实现接口就行. 只实现了减号有颜色的按钮,加号操作是一样的。