如何使用Android实现常见的验证码输入框

  介绍

小编给大家分享一下如何使用Android实现常见的验证码输入框,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

<强>正文

先搂一眼效果吧

如何使用Android实现常见的验证码输入框

不要把注意力都放在头顶的那一抹绿上,重点在输入框,可能大多数应用里都是采用6个方框的UI效果,我这里是按照我们设计的要求,用6根横线来划出6个数字的位置。一开始我想的是直接用6个TextView,然后传递焦点的做法,但是发现实现起来有一定的难度。又在网上查了一下,发现比较靠谱的办法是用6个TextView加一个EditText来实现,也按照这个方法去实现了,但是后来在测试的时候就发现了问题:网上给出的实现方式需要监听软键盘的删除按钮

editText.setOnKeyListener (new  OnKeyListener (), {   @Override。才能   ,,public  boolean  onKey (View  v, int 键码,,KeyEvent 事件),{   ,,,if  (keyCode ==KeyEvent.KEYCODE_DEL   ,,,,,,,,event.getAction (),==, KeyEvent.ACTION_DOWN), {   ,,,,//TODO:   ,,,,return 真实;   ,,,}   ,,,return 假;   ,,}   });才能

这是一个大家熟知的写法,但是这个监听的方法其实并不靠谱(在安卓原生键盘上就监听不到),因为这个监听是否触发,并没有强制的要求,全看输入法开发者的心情,这是官方文档中的描述:

按键软件键盘通常会不会触发此方法,虽然在某些情况下,有些人可能会选择这样做。

只能输入,不能删除,这可不行啊,用户肯定会骂娘的,我可不想被拿去去祭天什么的……

于是乎只能想办法在原有的基础上做一些修改,来规避这个问题,最后采用的方案是:采用一个TextView的数组来维护6个TextView,然后藏一个透明的EditTextView在后面用于接收用户输入的内容,再把输入的内容展示到6个TextView上就行了,UI什么的可以自己随意设计。在实现的过程中,遇到的一个关键问题就是:当输入的内容超过6位以后我该如何处理?一开始的方案是通过判断当前输入的位数然后再做相应的处理,网上的方案也是这么实现的,我后来一想,根本用不着这么麻烦,只需要一行属性就能解决这个问题:

android:最大长度=?“

只需要在EditText的属性里限制它的最大长度,就不用再去代码里做处理了,直接把EditTextView里的内容完全照搬到TextView上就可以了。

最终的完整代码如下:

public  class  VerifyCodeView  extends  RelativeLayout  {   editText, private  EditText ;   ,private  TextView[],两个;   ,private  static  int  MAX =, 6;   ,private  String  inputContent;      ,public  VerifyCodeView (Context 上下文),{   这才能(上下文,null);   ,}      ,public  VerifyCodeView (Context 上下文,AttributeSet  attrs), {   这才能(上下文,attrs,, 0);   ,}      ,public  VerifyCodeView (Context 上下文,AttributeSet  attrs,, int  defStyleAttr), {   超级才能(上下文,attrs,, defStyleAttr);   View.inflate才能(上下文,R.layout.view_verify_code,,);      时间=textViews 才能;new  TextView (MAX);   两个才能[0],=,(TextView), findViewById (R.id.item_code_iv0);   两个才能[1],=,(TextView), findViewById (R.id.item_code_iv1);   两个才能[2],=,(TextView), findViewById (R.id.item_code_iv2);   两个才能[3],=,(TextView), findViewById (R.id.item_code_iv3);   两个才能[4],=,(TextView), findViewById (R.id.item_code_iv4);   两个才能[5],=,(TextView), findViewById (R.id.item_code_iv5);   editText 才能=,(EditText), findViewById (R.id.item_edittext);      editText.setCursorVisible才能(假);//隐藏光标   setEditTextListener才能();   ,}      ,private  void  setEditTextListener (), {   editText.addTextChangedListener才能(new  TextWatcher (), {      @Override。才能   ,,public  void  beforeTextChanged (CharSequence  charSequence进行,int 我,int  i1,, int  i2), {      ,,}      @Override。才能   ,,public  void  onTextChanged (CharSequence  charSequence进行,int 我,int  i1,, int  i2), {      ,,}      @Override。才能   ,,public  void  afterTextChanged (Editable 可编辑),{   ,,,inputContent =, editText.getText () .toString ();      ,,,if  (inputCompleteListener  !=, null), {   ,,,,if  (inputContent.length(),在=,MAX), {   ,,,,,inputCompleteListener.inputComplete ();   ,,,,},{else    ,,,,,inputCompleteListener.invalidContent ();   ,,,,}   ,,,}      ,,,for  (int 小姐:=,0;,小姐:& lt;, MAX;,我+ +),{   ,,,,if (小姐:& lt;, inputContent.length ()), {   ,,,,,两个[我]. settext (String.valueOf (inputContent.charAt(我)));   ,,,,},{else    ,,,,,两个[我]. settext (“;”);   ,,,,}   ,,,}   ,,}   ,,});   ,}         null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何使用Android实现常见的验证码输入框