Android 银行卡手机号带空格格式_第1张图片

工具类:

package com.gongzhibao.gzb.widget;import android.content.Context;import android.content.res.TypedArray;import android.support.v7.widget.AppCompatEditText;import android.text.Editable;import android.text.InputFilter;import android.text.InputType;import android.text.TextUtils;import android.text.TextWatcher;import android.text.method.DigitsKeyListener;import android.util.AttributeSet;import android.widget.Toast;import com.gongzhibao.gzb.R;/** * 银行卡 手机 身份证输入框  2018/7/9. */public class ContentWithSpaceEditText extends AppCompatEditText {    public static final int TYPE_PHONE = 0;    public static final int TYPE_BANK_CARD = 1;    public static final int TYPE_ID_CARD = 2;    private int start, count,before;    private int contentType;    private int maxLength = 50;    private String digits;    public ContentWithSpaceEditText(Context context) {        this(context, null);    }    public ContentWithSpaceEditText(Context context, AttributeSet attrs) {        super(context, attrs);        parseAttributeSet(context, attrs);    }    public ContentWithSpaceEditText(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        parseAttributeSet(context, attrs);    }    private void parseAttributeSet(Context context, AttributeSet attrs) {        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ContentWithSpaceEditText, 0, 0);        contentType = ta.getInt(R.styleable.ContentWithSpaceEditText_input_type, 0);        // 必须调用recycle        ta.recycle();        initType();        setSingleLine();        addTextChangedListener(watcher);    }    private void initType(){        if (contentType == TYPE_PHONE) {            maxLength = 13;            digits = "0123456789 ";            setInputType(InputType.TYPE_CLASS_NUMBER);        } else if (contentType == TYPE_BANK_CARD) {            maxLength = 31;            digits = "0123456789 ";            setInputType(InputType.TYPE_CLASS_NUMBER);        } else if (contentType == TYPE_ID_CARD) {            maxLength = 21;            digits = null;            setInputType(InputType.TYPE_CLASS_TEXT);        }        setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});    }    @Override    public void setInputType(int type) {        if (contentType == TYPE_PHONE || contentType == TYPE_BANK_CARD) {            type = InputType.TYPE_CLASS_NUMBER;        }else if(contentType == TYPE_ID_CARD){            type = InputType.TYPE_CLASS_TEXT;        }        super.setInputType(type);        /* 非常重要:setKeyListener要在setInputType后面调用,否则无效。*/        if(!TextUtils.isEmpty(digits)) {            setKeyListener(DigitsKeyListener.getInstance(digits));        }    }    /**     * 设置内容的类型     * @param contentType   类型     */    public void setContentType(int contentType) {        this.contentType = contentType;        initType();    }    private TextWatcher watcher = new TextWatcher() {        @Override        public void beforeTextChanged(CharSequence s, int start, int count, int after) {        }        @Override        public void onTextChanged(CharSequence s, int start, int before, int count) {            ContentWithSpaceEditText.this.start = start;            ContentWithSpaceEditText.this.before = before;            ContentWithSpaceEditText.this.count = count;        }        @Override        public void afterTextChanged(Editable s) {            if (s == null) {                return;            }            //判断是否是在中间输入,需要重新计算            boolean isMiddle = (start + count) < (s.length());            //在末尾输入时,是否需要加入空格            boolean isNeedSpace = false;            if (!isMiddle && isSpace(s.length())) {                isNeedSpace = true;            }            if (isMiddle || isNeedSpace || count > 1) {                String newStr = s.toString();                newStr = newStr.replace(" ", "");                StringBuilder sb = new StringBuilder();                int spaceCount = 0;                for (int i = 0; i < newStr.length(); i++) {                    sb.append(newStr.substring(i, i+1));                    //如果当前输入的字符下一位为空格(i+1+1+spaceCount),因为i是从0开始计算的,所以一开始的时候需要先加1                    if(isSpace(i + 2 + spaceCount)){                        sb.append(" ");                        spaceCount += 1;                    }                }                removeTextChangedListener(watcher);                s.replace(0, s.length(),sb);                //如果是在末尾的话,或者加入的字符个数大于零的话(输入或者粘贴)                if (!isMiddle || count > 1) {                    setSelection(s.length() <= maxLength ? s.length() : maxLength);                } else {                    //如果是删除                    if (count == 0) {                        //如果删除时,光标停留在空格的前面,光标则要往前移一位                        if (isSpace(start - before + 1)) {                            setSelection((start - before) > 0 ? start - before : 0);                        } else {                            setSelection((start - before + 1) > s.length() ? s.length() : (start - before + 1));                        }                    }                    //如果是增加                    else {                        if (isSpace(start - before + count)) {                            setSelection((start + count - before + 1) < s.length() ? (start + count - before + 1) : s.length());                        } else {                            setSelection(start + count - before);                        }                    }                }                addTextChangedListener(watcher);            }        }    };    public String getTextWithoutSpace() {        return super.getText().toString().replace(" ", "");    }    public boolean checkTextRight(){        String text = getTextWithoutSpace();        //这里做个简单的内容判断        if (contentType == TYPE_PHONE) {            if (TextUtils.isEmpty(text)) {                showShort(getContext(), "手机号不能为空,请输入正确的手机号");            } else if (text.length() < 11) {                showShort(getContext(), "手机号不足11位,请输入正确的手机号");            } else {                return true;            }        } else if (contentType == TYPE_BANK_CARD) {            if (TextUtils.isEmpty(text)) {                showShort(getContext(), "银行卡号不能为空,请输入正确的银行卡号");            } else if (text.length() < 14) {                showShort(getContext(), "银行卡号位数不正确,请输入正确的银行卡号");            } else {                return true;            }        } else if (contentType == TYPE_ID_CARD) {            if (TextUtils.isEmpty(text)) {                showShort(getContext(), "身份证号不能为空,请输入正确的身份证号");            } else if (text.length() < 18) {                showShort(getContext(), "身份证号不正确,请输入正确的身份证号");            } else {                return true;            }        }        return false;    }    private void showShort(Context context,String msg){        Toast.makeText(context.getApplicationContext(), msg, Toast.LENGTH_SHORT).show();    }    private boolean isSpace(int length) {        if (contentType == TYPE_PHONE) {            return isSpacePhone(length);        } else if (contentType == TYPE_BANK_CARD) {            return isSpaceCard(length);        } else if (contentType == TYPE_ID_CARD) {            return isSpaceIDCard(length);        }        return false;    }    private boolean isSpacePhone(int length) {        return length >= 4 && (length == 4 || (length + 1) % 5 == 0);    }    private boolean isSpaceCard(int length) {        return length % 5 == 0;    }    private boolean isSpaceIDCard(int length) {        return length > 6 && (length == 7 || (length - 2) % 5 == 0);    }}

 

资源文件values下创建attrs文件

<?xml version="1.0" encoding="utf-8"?>                                                            

使用

bank.setContentType(1);//银行卡号phone.setContentType(0);//电话号number.setContentType(2);//身份证号

获取内容(去掉空格)

phone.getText().toString().replace(" ", "");

更多相关文章

  1. 2010.12.26——— android 获得手机号码 和 IMEI号 等
  2. android TextView中多个空格只显示一个
  3. Android利用WebService查询手机号码归属地
  4. android获取手机号码以及imsi信息
  5. android中去掉空格--trim函数
  6. Android发送SOAP数据给服务器调用webservice,实现手机号归属地查
  7. Android复制手机号码到剪切板并调起打电话功能
  8. C#关于验证身份证号码的实例分析(正确性)
  9. 详细介绍xml中的空格之完全解说

随机推荐

  1. Android(安卓)ANR 详解
  2. Android(安卓)Navigation使用
  3. Android:SlidingMenu(侧滑菜单)用法示例
  4. 《Kotlin》 Android(安卓)Studio3.0 新特
  5. android service 例子(电话录音和获取系统
  6. android:inputType标签、textView限制输
  7. Android(安卓)Studio 3.0下Jni开发环境配
  8. [android研究联系人之二]联系人Email/Nic
  9. 解决给一组Button设置Background导致点击
  10. [转]Android中的BatteryService及相关组