博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android EditText方框验证码 短信验证码的实现
阅读量:4323 次
发布时间:2019-06-06

本文共 6681 字,大约阅读时间需要 22 分钟。

package com.loaderman.securitycodedemo;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity implements SecurityCodeView.InputCompleteListener {    private SecurityCodeView editText;    private TextView text;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViews();        setListener();    }    private void setListener() {        editText.setInputCompleteListener(this);    }    private void findViews() {        editText = (SecurityCodeView) findViewById(R.id.scv_edittext);        text = (TextView) findViewById(R.id.tv_text);    }    @Override    public void inputComplete() {        Toast.makeText(getApplicationContext(), "验证码是:" + editText.getEditContent(), Toast.LENGTH_LONG).show();        if (!editText.getEditContent().equals("1234")) {            text.setText("验证码输入错误");            text.setTextColor(Color.RED);        }    }    @Override    public void deleteContent(boolean isDelete) {        if (isDelete){            text.setText("输入验证码表示同意《用户协议》");            text.setTextColor(Color.BLACK);        }    }}

 activity_main.xml

 

import android.content.Context;import android.text.Editable;import android.text.TextWatcher;import android.util.AttributeSet;import android.view.KeyEvent;import android.view.View;import android.widget.EditText;import android.widget.RelativeLayout;import android.widget.TextView;public class SecurityCodeView extends RelativeLayout {    private EditText editText;    private TextView[] TextViews;    private StringBuffer stringBuffer = new StringBuffer();    private int count = 4;    private String inputContent;    public SecurityCodeView(Context context) {        this(context, null);    }    public SecurityCodeView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public SecurityCodeView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        TextViews = new TextView[4];        View.inflate(context, R.layout.view_security_code, this);        editText = (EditText) findViewById(R.id.item_edittext);        TextViews[0] = (TextView) findViewById(R.id.item_code_iv1);        TextViews[1] = (TextView) findViewById(R.id.item_code_iv2);        TextViews[2] = (TextView) findViewById(R.id.item_code_iv3);        TextViews[3] = (TextView) findViewById(R.id.item_code_iv4);        editText.setCursorVisible(false);//将光标隐藏        setListener();    }    private void setListener() {        editText.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) {                //重点   如果字符不为""时才进行操作                if (!editable.toString().equals("")) {                    if (stringBuffer.length() > 3) {                        //当文本长度大于3位时edittext置空                        editText.setText("");                        return;                    } else {                        //将文字添加到StringBuffer中                        stringBuffer.append(editable);                        editText.setText("");//添加后将EditText置空  造成没有文字输入的错局                        //  Log.e("TAG", "afterTextChanged: stringBuffer is " + stringBuffer);                        count = stringBuffer.length();//记录stringbuffer的长度                        inputContent = stringBuffer.toString();                        if (stringBuffer.length() == 4) {                            //文字长度位4  则调用完成输入的监听                            if (inputCompleteListener != null) {                                inputCompleteListener.inputComplete();                            }                        }                    }                    for (int i = 0; i < stringBuffer.length(); i++) {                        TextViews[i].setText(String.valueOf(inputContent.charAt(i)));                        TextViews[i].setBackgroundResource(R.mipmap.bg_verify_press);                    }                }            }        });        editText.setOnKeyListener(new OnKeyListener() {            @Override            public boolean onKey(View v, int keyCode, KeyEvent event) {                if (keyCode == KeyEvent.KEYCODE_DEL                        && event.getAction() == KeyEvent.ACTION_DOWN) {                    if (onKeyDelete()) return true;                    return true;                }                return false;            }        });    }    public boolean onKeyDelete() {        if (count == 0) {            count = 4;            return true;        }        if (stringBuffer.length() > 0) {            //删除相应位置的字符            stringBuffer.delete((count - 1), count);            count--;            //   Log.e(TAG, "afterTextChanged: stringBuffer is " + stringBuffer);            inputContent = stringBuffer.toString();            TextViews[stringBuffer.length()].setText("");            TextViews[stringBuffer.length()].setBackgroundResource(R.mipmap.bg_verify);            if (inputCompleteListener != null)                inputCompleteListener.deleteContent(true);//有删除就通知manger        }        return false;    }    /**     * 清空输入内容     */    public void clearEditText() {        stringBuffer.delete(0, stringBuffer.length());        inputContent = stringBuffer.toString();        for (int i = 0; i < TextViews.length; i++) {            TextViews[i].setText("");            TextViews[i].setBackgroundResource(R.mipmap.bg_verify);        }    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        return super.onKeyDown(keyCode, event);    }    private InputCompleteListener inputCompleteListener;    public void setInputCompleteListener(InputCompleteListener inputCompleteListener) {        this.inputCompleteListener = inputCompleteListener;    }    public interface InputCompleteListener {        void inputComplete();        void deleteContent(boolean isDelete);    }    /**     * 获取输入文本     *     * @return     */    public String getEditContent() {        return inputContent;    }}

 view_security_code.xml

 style.xml中

 效果图:


本文学习来源:


 

转载于:https://www.cnblogs.com/loaderman/p/6637155.html

你可能感兴趣的文章
Python核心编程的四大神兽:迭代器、生成器、闭包以及装饰器
查看>>
linux /proc/sys/fs/file-nr /proc/sys/fs/file-max /etc/security/limits.conf 三者的关联
查看>>
AndroidStudio-快捷键
查看>>
用python DIY一个图片转pdf工具并打包成exe
查看>>
6月14 空控制器和空操作及命名空间
查看>>
volicity文法学习和总结
查看>>
block 块的内部结构
查看>>
IDEA修改git账号密码
查看>>
C# 插入排序
查看>>
每周总结16
查看>>
9_2二维数组
查看>>
为django项目创建虚拟环境
查看>>
30-RoutingMiddleware介绍以及MVC引入
查看>>
【转】AB实验设计思路及实验落地
查看>>
PHP获取客户端的IP
查看>>
C# 创建单例窗体封装
查看>>
移动端报表如何获取当前地理位置
查看>>
spring 源码
查看>>
使用 opencv 将图片压缩到指定文件尺寸
查看>>
linux中~和/的区别
查看>>