Android商城 带加减按钮的 EditText

最近在做一个商城的项目,商城项目中需要选择商品数量,除了手动输入商品数量之外,还需要两个按钮可以增减商品数量,具体效果如下图。

Android商城 带加减按钮的 EditText_第1张图片


本例说明的是上图中数量的增减和输入功能,考虑到商城项目,都会有个购物车模块,在购物车模块可能还会有更改商品数量的操作,也就是说这个修改商品数量的功能,我们需要考虑能不能复用的问题。

我的实现思路为自定义View,也就是说将左边的 “-” 按钮 中间的EditText 和最右边的 “+” 组合起来定义成一个View,这样我们在购买商品的界面,和后面购物车编辑的界面,就可以复用了。


OK,话不多说,我们直接上代码


这个是自定义View 的布局文件代码:


android:background="@drawable/order_edit_bg"
    android:orientation="horizontal"

    >

    
    

        @drawable/order_delete"/>
    
    
    @color/order_edit_line"/>

    

    

    
    

        @drawable/order_add"/>
    

上面布局文件中有些引用(也就是红色部分),因为是真是项目,不凡便全部展示,只截取本例需要的给大家展示(主要是考虑到很多和我一样的Android小白)

android:background="@drawable/order_edit_bg" 需要在 drawable目录下创建一个名为:order_edit_bg.xml的配置文件,该文件具体定义如下:


    
    
 
  

@drawable/order_delete 图片给你们:

@color/order_edit_line : 
name="order_edit_line">#8a8a8a
 
  
 
  


@drawable/order_add 图片如下:



好了,我们的布局文件已经说完了,接下类就是我们的自定义View类,具体代码如下:

/**
 * 带±的输入框 Created by BscJhNN on 15/12/3.
 */
public class OrderEditTextView extends FrameLayout implements View.OnClickListener {

    private View add;

    private View del;

    private EditText edit;

    private OnOrderEditCallBack callback;

    //添加商品是默认的最大添加数量
    private int max = 255;

    private final int MIN = 1;

    public boolean canToast = true;

    /**
     * 申请退货提示
     */
    private boolean isReturnGoodsToast;

    public OrderEditTextView(Context context) {
        super(context);
        init();
    }

    public OrderEditTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public void init() {
        View view = LayoutInflater.from(getContext()).inflate(R.layout.order_edit, null);
        this.addView(view);
        add = findViewById(R.id.add);
        del = findViewById(R.id.delete);
        edit = (EditText) findViewById(R.id.edit);
        edit.setText("1");
        add.setOnClickListener(this);
        del.setOnClickListener(this);
        edit.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                int num = Integer.parseInt(TextUtils.isEmpty(edit.getText().toString()) ? "1"
                        : edit.getText().toString());
                if (max < MIN) {
                    max = MIN;
                }
                if (num > max) {
                    edit.setText(String.valueOf(max));
                    if (edit.getVisibility() == View.VISIBLE) {
                        if (canToast) {
                            Toast.makeText(getContext(), "已到达商品最大购买数量", Toast.LENGTH_SHORT).show();
                        }

                    }

                } else if (num < MIN) {
                    edit.setText(String.valueOf(MIN));
                }

                if (callback != null) {
                    callback.OnCallBack(getText());
                }
            }
        });

    }

    public void setRetrunGoodsToast(boolean isReturnGoodsToast) {
        this.isReturnGoodsToast = isReturnGoodsToast;
    }

    @Override
    public void onClick(View view) {
        int num = Integer.parseInt(
                TextUtils.isEmpty(edit.getText().toString()) ? "1" : edit.getText().toString());
        switch (view.getId()) {
            case R.id.add:
                if (num < max) {
                    edit.setText(String.valueOf(num + 1));
                } else {
                    if (!isReturnGoodsToast) {
                        Toast.makeText(getContext(), "已达到商品可购买最大数量了哦", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(getContext(), "已达到可申请最大数量了哦", Toast.LENGTH_SHORT).show();
                    }

                }
                break;
            case R.id.delete:
                int n = num - 1;
                if (num > MIN) {
                    edit.setText(String.valueOf(num - 1));
                }
                if (n < MIN) {
                    Toast.makeText(getContext(), "不能再减少啦", Toast.LENGTH_SHORT).show();
                }
                break;
        }

        edit.setSelection(edit.getText().length());
    }

    public int getText() {
        try {
            return Integer.parseInt(edit.getText().toString());
        } catch (Exception e) {
            return 1;
        }
    }

    public void setText(String text) {
        try {
            edit.setText(TextUtils.isEmpty(text) ? "1" : String.valueOf(Integer.parseInt(text)));
        } catch (Exception e) {
            edit.setText("1");
        }
    }

    public void setOnOrderEditCallBack(OnOrderEditCallBack callback) {
        this.callback = callback;
    }

    /**
     * 设置edit最大值
     *
     * @param max
     */
    public void setMax(int max) {
        this.max = max;
    }

    /**
     * 点击事件的回调
     */
    public interface OnOrderEditCallBack {
        void OnCallBack(int num);
    }
}

上面代码大家仔细研读,大神请骗过,奉献给和我一起处于Android开发初期的兄弟们。

有什么问题欢迎大家和我交流,我的QQ:290887654

第一次下决心要写博客,写的不通顺的地方,欢迎大家指出。









你可能感兴趣的:(Android基础)