这里写自定义目录标题

  • 验证码输入框器
    • 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监听用户的删除事件,跳转到上一个输入框。
好了,同志门还有什么更好的实现方法,欢迎来交流学习。

更多相关文章

  1. Android(安卓)监听系统媒体音量变化
  2. 调用百度语音SDK,简单的语音识别控件
  3. Android(安卓)RecyclerView设置分割线
  4. ConstraintLayout使用心得以及几个需要注意的地方
  5. Android(安卓)日期选择控件
  6. Android(安卓)设置飞行模式
  7. 安卓布局知识点
  8. Android(安卓)-- ListView(SimpleAdapter) 自定义适配器
  9. android ——设置圆形图片

随机推荐

  1. Android去除标题栏及自定义title栏
  2. android资源配置文件
  3. 背景图片显示问题 图片显示错误 android
  4. Cordova 入门AndroidStudio集成
  5. android动画效果处理
  6. ContentProvider-获取系统数据
  7. EditText 的常用属性与解释
  8. 阅读《Android(安卓)从入门到精通》(23)—
  9. Android使用Junit测试
  10. android 开源和一些博客总结