介绍
如何在Android中实现一个银行卡,手机号格式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
工具类:
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 开始,,,, ,private int  contentType; ,private int maxLength =, 50; ,private String 数字; , ,public ContentWithSpaceEditText (Context 上下文),{ 这才能(上下文,null); ,} , ,public ContentWithSpaceEditText (Context 上下文,AttributeSet attrs), { 超级才能(上下文,attrs); parseAttributeSet才能(上下文,attrs); ,} , ,public ContentWithSpaceEditText (Context 上下文,AttributeSet attrs,, int defStyleAttr), { 超级才能(上下文,attrs,, defStyleAttr); parseAttributeSet才能(上下文,attrs); ,} , ,private void  parseAttributeSet (Context 上下文,AttributeSet attrs), { TypedArray 才能;ta =, context.obtainStyledAttributes (attrs, R.styleable.ContentWithSpaceEditText,, 0, 0); 时间=contentType 才能;ta.getInt (R.styleable.ContentWithSpaceEditText_input_type, 0);//才能,必须调用回收的 ta.recycle才能(); initType才能(); setSingleLine才能(); addTextChangedListener才能(观察者); ,} , ,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 =,空; ,,setInputType (InputType.TYPE_CLASS_TEXT); ,,} setFilters才能(new InputFilter [] {new InputFilter.LengthFilter(最大长度)}); ,} , ,@Override ,public void  setInputType (int 类型),{ if 才能;(contentType ==, TYPE_PHONE | |, contentType ==, TYPE_BANK_CARD), { ,,type =, InputType.TYPE_CLASS_NUMBER; }才能else 如果(contentType ==, TYPE_ID_CARD) { ,,type =, InputType.TYPE_CLASS_TEXT; ,,} super.setInputType才能(类型);/*才能,非常重要:setKeyListener要在setInputType后面调用,否则无效。*/如果才能(! TextUtils.isEmpty(数字),{ ,,setKeyListener (DigitsKeyListener.getInstance(数字)); ,,} ,} ,/* * *,才能设置内容的类型 *,才能@param contentType 类型 ,*/,public void  setContentType (int contentType), { 时间=this.contentType 才能;contentType; initType才能(); ,} , ,private TextWatcher watcher =, new TextWatcher (), { @Override才能 public 才能;void  beforeTextChanged (CharSequence 年代,int 开始,int 统计,,int 后),{ ,,} , @Override才能 public 才能;void  onTextChanged (CharSequence 年代,int 开始,int 之前,int 计数),{ ,,ContentWithSpaceEditText.this.start =,开始;=,,ContentWithSpaceEditText.this.before ;; ,,ContentWithSpaceEditText.this.count =,计数; ,,} , @Override才能 public 才能;void  afterTextChanged (Editable s), { ,,if (s ==, null), { ,,,返回; ,,} null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null如何在Android中实现一个银行卡,手机号格式