购物车按钮加一减一 自定义组合式按钮

首先创建一个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);
}
}
如果需要用接口,直接实现接口就行.
只实现了减号有颜色的按钮,加号操作是一样的。 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值