天天看点

android自定义 数字键盘2

1.使用枚举定义键值和对应的类型。

2.输入框可以自定义。也可以使用自定义输入框

3.通过一个集合来完成输入数据的追加和移除

看过上一篇,知道上篇留了一个尾巴,只是说明了自定义数字键盘中使用技术,并没有贴相应的代码,这篇贴上代码,做出一些必要解释

public enum KeyboardEnum {

    one(ActionEnum.add, "1"),
    two(ActionEnum.add, "2"),
    three(ActionEnum.add, "3"),
    four(ActionEnum.add, "4"),
    five(ActionEnum.add, "5"),
    sex(ActionEnum.add, "6"),
    seven(ActionEnum.add, "7"),
    eight(ActionEnum.add, "8"),
    nine(ActionEnum.add, "9"),
    zero(ActionEnum.add, "0"),
    del(ActionEnum.delete, "del"),
    longdel(ActionEnum.longClick, "longclick"),
    cancel(ActionEnum.cancel, "cancel"),
    sure(ActionEnum.sure, "sure");

    public enum ActionEnum {
        add, delete, longClick, cancel, ActionEnum, sure
    }

    private ActionEnum type;
    private String value;

    private KeyboardEnum(ActionEnum type, String value) {
        this.type = type;
        this.value = value;
    }

    public ActionEnum getType() {
        return type;
    }

    public void setType(ActionEnum type) {
        this.type = type;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}      

longClick, cancel, ActionEnum, sure

这些只是一些特殊处理,这里不进行扩展,会给出原文链接。其实也就是根据类型。做一些特殊处理罢了

这样看,就可以看出使用枚举类型的好处了。很清晰。数字0-9对应 追加。(字符串相加),删除操作,进行分开处理。

输入框使用的 GridPasswordView

​​​https://github.com/Jungerr/GridPasswordView​​

本来准备使用这个组件,不料和交互不符合。就作为一个输入框。他里面的事件,监听,能注释的都注视了。只是作为一个输入框使用

1.拿到资源,设置监听事件,处理onclick事件

package com.nuoyuan.sp2p.util;

import android.annotation.SuppressLint;
import android.content.Context;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.nuoyuan.sp2p.R;

import java.util.ArrayList;

@SuppressLint("InflateParams")
public class PayKeyboardView implements View.OnClickListener, View.OnLongClickListener {

    private ArrayList<String> mList = new ArrayList<String>();
    private View mView;
    private OnPayListener listener;
    private Context mContext;
    private Button btn1;
    private Button btn2;
    private Button btn3;
    private Button btn4;
    private Button btn5;
    private Button btn6;
    private Button btn7;
    private Button btn8;
    private Button btn9;
    private Button btnDel;
    private Button btn0;
    private Button btnEnd;

    private TextView[] textViews;
    private FrameLayout fraBtn;

    public PayKeyboardView(Context context, View view) {
        this.mContext = context;
        mView = view;
        initView();
        setOnclickLisener();
    }

    /**
     * 初始化验证码框的值
     */
    private void initVerificationCodeBoxValue() {
        if (!mList.isEmpty()) {
            mList.clear();
            updateVerificationCodeBoxUi();
        }
    }

    private void setOnclickLisener() {
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
        btn5.setOnClickListener(this);
        btn6.setOnClickListener(this);
        btn7.setOnClickListener(this);
        btn8.setOnClickListener(this);
        btn9.setOnClickListener(this);
        btnDel.setOnClickListener(this);
        btn0.setOnClickListener(this);
        btnDel.setOnLongClickListener(this);
        fraBtn.setOnClickListener(this);
    }

    private void initView() {
        btn1 = (Button) mView.findViewById(R.id.btn_1);
        btn2 = (Button) mView.findViewById(R.id.btn_2);
        btn3 = (Button) mView.findViewById(R.id.btn_3);
        btn4 = (Button) mView.findViewById(R.id.btn_4);
        btn5 = (Button) mView.findViewById(R.id.btn_5);
        btn6 = (Button) mView.findViewById(R.id.btn_6);
        btn7 = (Button) mView.findViewById(R.id.btn_7);
        btn8 = (Button) mView.findViewById(R.id.btn_8);
        btn9 = (Button) mView.findViewById(R.id.btn_9);
        btnDel = (Button) mView.findViewById(R.id.btn_del);
        btn0 = (Button) mView.findViewById(R.id.btn_0);
        btnEnd = (Button) mView.findViewById(R.id.btn_end);
        fraBtn = (FrameLayout) mView.findViewById(R.id.fra_btn);
    }


    private void parseActionType(KeyboardEnum type) {
        if (type.getType() == KeyboardEnum.ActionEnum.add) {
            if (mList.size() < 6) {
                mList.add(type.getValue());
                updateVerificationCodeBoxUi();
            }
            // TODO: 2016/7/8  可以进行优化  直接返回 list
            if (mList.size() == 6) { //触发支付回调
                String payValue = "";
                for (int i = 0; i < mList.size(); i++) {
                    payValue += mList.get(i);
                }
                listener.onSurePay(payValue);
            }
        } else if (type.getType() == KeyboardEnum.ActionEnum.delete) {
            if (mList.size() > 0) {
                mList.remove(mList.get(mList.size() - 1));
                updateVerificationCodeBoxUi();
            }
        } else if (type.getType() == KeyboardEnum.ActionEnum.cancel) {
            listener.onCancelPay();
        }
        // TODO: 2016/7/8  确认和长按事件禁用
//        else if (type.getType() == KeyboardEnum.ActionEnum.sure) {
//            if (mList.size() < 6) {
//                Toast.makeText(mContext, "请输入验证码", Toast.LENGTH_SHORT).show();
//            } else {
//                String payValue = "";
//                for (int i = 0; i < mList.size(); i++) {
//                    payValue += mList.get(i);
//                }
//                listener.onSurePay(payValue);
//            }
//        } else if (type.getType() == KeyboardEnum.ActionEnum.longClick) {
//            mList.clear();
//            updateUi();
//        }
    }

    private void updateVerificationCodeBoxUi() {
        //todo 只针对6个密码框
//        for (int i = 0; i < 5; i++) {
//            if (i > mList.size()) {
//                textViews[i].setText("");
//            } else {
//                textViews[i].setText(mList.get(i));
//            }
//        }
        if (mList.size() == 0) {
            textViews[0].setText("");
            textViews[1].setText("");
            textViews[2].setText("");
            textViews[3].setText("");
            textViews[4].setText("");
            textViews[5].setText("");
        } else if (mList.size() == 1) {
            textViews[0].setText(mList.get(0));
            textViews[1].setText("");
            textViews[2].setText("");
            textViews[3].setText("");
            textViews[4].setText("");
            textViews[5].setText("");
        } else if (mList.size() == 2) {
            textViews[0].setText(mList.get(0));
            textViews[1].setText(mList.get(1));
            textViews[2].setText("");
            textViews[3].setText("");
            textViews[4].setText("");
            textViews[5].setText("");
        } else if (mList.size() == 3) {
            textViews[0].setText(mList.get(0));
            textViews[1].setText(mList.get(1));
            textViews[2].setText(mList.get(2));
            textViews[3].setText("");
            textViews[4].setText("");
            textViews[5].setText("");
        } else if (mList.size() == 4) {
            textViews[0].setText(mList.get(0));
            textViews[1].setText(mList.get(1));
            textViews[2].setText(mList.get(2));
            textViews[3].setText(mList.get(3));
            textViews[4].setText("");
            textViews[5].setText("");
        } else if (mList.size() == 5) {
            textViews[0].setText(mList.get(0));
            textViews[1].setText(mList.get(1));
            textViews[2].setText(mList.get(2));
            textViews[3].setText(mList.get(3));
            textViews[4].setText(mList.get(4));
            textViews[5].setText("");
        } else if (mList.size() == 6) {
            textViews[0].setText(mList.get(0));
            textViews[1].setText(mList.get(1));
            textViews[2].setText(mList.get(2));
            textViews[3].setText(mList.get(3));
            textViews[4].setText(mList.get(4));
            textViews[5].setText(mList.get(5));
        }
    }


    @Override
    public void onClick(View v) {
        if (v == btn0) {
            parseActionType(KeyboardEnum.zero);
        } else if (v == btn1) {
            parseActionType(KeyboardEnum.one);
        } else if (v == btn2) {
            parseActionType(KeyboardEnum.two);
        } else if (v == btn3) {
            parseActionType(KeyboardEnum.three);
        } else if (v == btn4) {
            parseActionType(KeyboardEnum.four);
        } else if (v == btn5) {
            parseActionType(KeyboardEnum.five);
        } else if (v == btn6) {
            parseActionType(KeyboardEnum.sex);
        } else if (v == btn7) {
            parseActionType(KeyboardEnum.seven);
        } else if (v == btn8) {
            parseActionType(KeyboardEnum.eight);
        } else if (v == btn9) {
            parseActionType(KeyboardEnum.nine);
        } else if (v == btnDel || v == fraBtn) {
            parseActionType(KeyboardEnum.del);
        }
    }

   /* else if (v == btnEnd) {
        parseActionType(KeyboardEnum.sure);
    } else if (v == btnDel ||) {
        parseActionType(KeyboardEnum.cancel);
    }*/

    @Override
    public boolean onLongClick(View v) {
        parseActionType(KeyboardEnum.longdel);
        return false;
    }

    public interface OnPayListener {
        void onCancelPay();

        void onSurePay(String password);
    }

    public View getView() {
        return mView;
    }

    public TextView[] getmViewArr() {
        return textViews;
    }

    public void setmViewArr(TextView[] mViewArr) {
        this.textViews = mViewArr;
    }

    public void initVerificationCodeBox(TextView[] mViewArr) {
        this.textViews = mViewArr;
        initVerificationCodeBoxValue();
    }

    public void setPayListener(OnPayListener payListener) {
        listener = payListener;
    }


}