android 验证码输入框
这里写自定义目录标题
- 验证码输入框器
- 1 开始写布局文件
- 2 开始Activity创建
验证码输入框器
最近在公司做项目的时候,做到了需要用到验证码的地方,因为之前做也没写过,这样的于是在网上百度了一下,发现是五花八门的,没有找到一个感觉实用的东西,也就自己想办法,用自己的思路做了一个,在这里分享给大家,希望能给同行门一点帮助和思路,看看实际的效果吧!哈哈。
1 开始写布局文件
首先开始要做的就先将这几个输入验证码的框框做出来,不多说直接上代码吧:
<?xml version="1.0" encoding="utf-8"?>
gravity 设置内容位置这里我设置的居中,inputType设置输入的类型,验证码数字
maxLength设置输入内容的最大长度,textColor,输入文字颜色
textSize,输入文字大小
这里我就以四位验证码为示例来写的,当然了,6位也差不了多少,直接在后面加就是了。
然后就是background资源代码,不多说看图:
创建之后代码如下:
<?xml version="1.0" encoding="utf-8"?>
corners设置四个边角,solid设置整体背景,stroke设置边框,width设置边框宽度,color颜色
2 开始Activity创建
接下来开始的就是我门的重头戏了,在activity中实现我门想要的效果不多说,直接上代码:
package com.example.androidstudydemo;import androidx.annotation.Nullable;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { private EditText num_in1_et, num_in2_et, num_in3_et, num_in4_et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); num_in1_et = findViewById(R.id.num_in1_et); num_in2_et = findViewById(R.id.num_in2_et); num_in3_et = findViewById(R.id.num_in3_et); num_in4_et = findViewById(R.id.num_in4_et); //addTextChangedListener设置监听文本变化,有输入跳转到下一个输入框 num_in1_et.addTextChangedListener(new TextChangeLister(num_in1_et,num_in2_et)); //setOnKeyListener设置监听键盘删除操作,删除完之后跳转到上一个输入框 num_in2_et.setOnKeyListener(new MyOnKeyListenr(num_in1_et, num_in2_et)); num_in2_et.addTextChangedListener(new TextChangeLister(num_in2_et,num_in3_et)); num_in3_et.setOnKeyListener(new MyOnKeyListenr(num_in2_et, num_in3_et)); num_in3_et.addTextChangedListener(new TextChangeLister(num_in3_et,num_in4_et)); num_in4_et.setOnKeyListener(new MyOnKeyListenr(num_in3_et, num_in4_et)); } //自定义文本变化监听类class TextChangeLister implements TextWatcher { private EditText thisEt,newxtEt; public TextChangeLister(EditText thisEt,EditText newxtEt){ this.thisEt=thisEt; this.newxtEt=newxtEt; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //text 输入框中改变后的字符串信息 //start 输入框中改变后的字符串的起始位置 //before 输入框中改变前的字符串的位置 默认为0 //count 输入框中改变后的一共输入字符串的数量 if(before==0&&count==1){ thisEt.clearFocus(); newxtEt.requestFocus(); } } @Override public void afterTextChanged(Editable s) { }} //自定义键盘监听 class MyOnKeyListenr implements View.OnKeyListener { private EditText upDt, thisDt; public MyOnKeyListenr(@Nullable EditText upDt, @Nullable EditText thisDt) { this.upDt = upDt; this.thisDt = thisDt; } @Override public boolean onKey(View view, int i, KeyEvent keyEvent) { Log.i("键盘监控", "view:" + view + " i:" + i + " keyEvent:" + keyEvent.toString()); if (keyEvent.getAction() == KeyEvent.ACTION_DOWN && i == KeyEvent.KEYCODE_DEL) { //如果上一个输入框不为空 if (upDt != null && thisDt.getText().toString().isEmpty()) { thisDt.clearFocus(); upDt.requestFocus(); } return false; } return false; } }}
代码的具体详解这里我就不在从新说明了,代码中的注解差不错都已经说的很清楚了,如果实在有不清楚的同学,可以给我留言,我会为之解答的, 这里说说我为什么会这样写的原因吧。
首先我是想用OnKeyListener监听直接实现的输入框下一个和上一个之间的跳转的,并且都写出来实现了,在模拟器上也能达到想要的效果。可是在真机上出问题了,数值输入的事件OnKeyListener根本就监听不了。之后我又尝试了软键盘监听器,但是使用软件盘监听感觉代码量多一些,最后我使用了输入文本变化监听器addTextChangedListener加上OnKeyListener监听的结合达到了我想要的目的。使用addTextChangedListener监听文本的输入事件,然后跳转到下一个输入框。使用OnKeyListener监听用户的删除事件,跳转到上一个输入框。
好了,同志门还有什么更好的实现方法,欢迎来交流学习。
更多相关文章
- Android(安卓)监听系统媒体音量变化
- 调用百度语音SDK,简单的语音识别控件
- Android(安卓)RecyclerView设置分割线
- ConstraintLayout使用心得以及几个需要注意的地方
- Android(安卓)日期选择控件
- Android(安卓)设置飞行模式
- 安卓布局知识点
- Android(安卓)-- ListView(SimpleAdapter) 自定义适配器
- android ——设置圆形图片