Code Monkey home page Code Monkey logo

verificationcodeview's Introduction

更多我的CSDN博客

联系: QQ 839539179 WEIXIN tuojie003    

VerificationCodeView —正方形验证码输入框


示例:

动图演示 动图演示

apk演示:点击下载


特性

自定义属性

name 说明 format 默认值
icv_et_number 输入框的数量 integer 1
icv_et_width 输入框的宽度 dimension 42dp
icv_et_divider_drawable 输入框之间的间隔 reference
icv_et_text_color 输入框文字颜色 color Color.WHITE
icv_et_text_size 输入框文字大小 dimension 16sp
icv_et_bg_focus 输入框获取焦点时边框 reference
icv_et_bg_normal 输入框没有焦点时边框 reference
icv_et_pwd 是否是密码模式 boolean false
icv_et_pwd_radius 密码模式时圆的半径 dimension reference

可使用方法

method_name description return_type
getInputContent 获取输入内容 String
clearInputContent 清空输入内容 Void
setEtNumber(int etNumber) 设置输入框个数 Void
getEtNumber 获取输入框个数 int
getEditText 获取EditText提供给外界设置键盘弹出 EditText
setPwdMode 动态设置是否是密码模式 void
setInputCompleteListener(InputCompleteListener listener) 设置输入和删除时的监听 Void

原理说明

该项目是一个继承于RelativeLayout的组合控件型的自定义View,在布局中文件中使用了一个透明的EditText来接受用户的输入事件, 在布局文件的LinearLayout中动态添加正方形输入框,正方形输入框其实是一个个的TextView。


使用方法

1 Gradle引用

implementation 'com.jacktuotuo.customview:verificationcodeview:1.0.5'

2 xml中使用

  • 简单配置
<com.tuo.customview.VerificationCodeView
        android:id="@+id/icv_1"
        app:icv_et_number="5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
  • 个性化配置
<com.tuo.customview.VerificationCodeView
        android:id="@+id/icv"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="26dp"
        app:icv_et_bg_focus="@drawable/shape_icv_et_bg_focus"
        app:icv_et_bg_normal="@drawable/shape_icv_et_bg_normal"
        app:icv_et_divider_drawable="@drawable/shape_divider_identifying"
        app:icv_et_number="6"
        app:icv_et_pwd="true"
        app:icv_et_pwd_radius="10dp"
        app:icv_et_text_color="#000000"
        app:icv_et_width="50dp" />

3 java代码中使用

VerificationCodeView codeView = new VerificationCodeView(context);
codeView.setEtNumber(number);
codeVidw.setPwdMode(true/false)

Update Log

version 1.0.1

  • 支持Java代码中动态设置输入框个数
  • 支持xml中只配置宽高,输入框个数默认为1

version 1.0.2

  • 修复设置字体大小的bug

version 1.0.3

  • 支持密码模式

version 1.0.4

  • 解决个别系统使用自动复制粘贴验证码时出现的bug
  • 解决Google和华为键盘删除键无效的bug

version 1.0.5

  • 解决一次删除两个数字的bug,模拟器使用时,请使用Backspace代替回退键

TODO

version-1.0.1

  • 支持在Java中动态设置输入框个数

version-1.0.2

  • 修改字体大小Bug

version-1.0.3

  • 支持密码模式

version-1.0.4

  • 解决个别系统使用自动复制粘贴验证码时出现的bug
  • 解决Google和华为键盘删除键无效的bug

version 1.0.5

  • 解决一次删除两个数字的bug

License

Copyright 2017 JackTuoTuo

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either expressor implied.See the License for the specific language governing permissions and limitations under the License.

verificationcodeview's People

Contributors

idealgn avatar jacktuotuo avatar slimvan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

verificationcodeview's Issues

请问怎么自动获得数字输入框?

EditText et1=verCode.getEditText();
et1.setFocusable(true);
et1.setFocusableInTouchMode(true);
et1.requestFocus();
InputMethodManager inputManager =
(InputMethodManager)et1.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(et1, 0);
用这种方法不会生效,请问应该怎么做?

删除键监听没有效果

在输入到一半的时候,点击系统软键盘的删除按钮,没有任何反应,日志打印结果发现
// 监听删除按键
et.setOnKeyListener(new OnKeyListener() {
@OverRide
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.i("ceshi","onKey1") ;
if (keyCode == KeyEvent.KEYCODE_DEL && event.getAction() == KeyEvent.ACTION_DOWN) {
onKeyDelete();
Log.i("ceshi","onKey2") ;
return true;
}
return false;
}
});
并没有经过这个回调,这是什么原因呢?

textSize单位问题

在VerificationCodeView 77行获取TextSize时mEtTextSize = typedArray.getDimensionPixelSize(R.styleable.VerificationCodeView_icv_et_text_size, 16);获取到的size是以px为单位的,但是在136行textView.setTextSize(etTextSize);时,使用的依旧是同样的数字,这里TextView会把这个size当成是sp为单位进行设置,导致在xml文件中设置的sp为单位的字体被放大。

如果是有问题的话,应该有两个解决办法:
1.在获取到mEtTextSize后将其转换为sp 。
2.textView.setTextSize时使用textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,mEtTextSize);
两者使用其一应该就可以解决

个人观点😄

如何将该控件作为密码输入框使用?

`

// 给TextView 设置文字
private void setText(String inputContent) {
    for (int i = 0; i < mTextViews.length; i++) {
        TextView tv = mTextViews[i];
        if (tv.getText().toString().trim().equals("")) {
            tv.setText(inputContent);
            tv.setTransformationMethod(PasswordTransformationMethod.getInstance()); // 改变TextView属性为展示密文的属性
            // 添加输入完成的监听
            if (inputCompleteListener != null) {
                inputCompleteListener.inputComplete();
            }
            tv.setBackgroundDrawable(mEtBackgroundDrawableNormal);
            if (i < mEtNumber - 1) {
                mTextViews[i + 1].setBackgroundDrawable(mEtBackgroundDrawableFocus);
            }
            break;
        }
    }
}`

请问一下如何能主动获取焦点弹出输入框

et = (EditText) this.findViewById(R.id.et);
et.requestFocus();

我在et后面加上这句代码也获取不了焦点,必须用户手动点击才可以弹出输入框。
请问一下如何能主动获取它的焦点弹出输入框呢?

clearInputContent()与焦点背景问题

 private void setText(String inputContent) {

        for (int i = 0; i < mPwdTextViews.length; i++) {
            PwdTextView tv = mPwdTextViews[i];
            if (tv.getText().toString().trim().equals("")) {
                if (mEtPwd) {
                    tv.drawPwd(mEtPwdRadius);
                }
                tv.setText(inputContent);
                // 添加输入完成的监听
                if (inputCompleteListener != null) {
                     //step  one
                    inputCompleteListener.inputComplete();
                }
                tv.setBackgroundDrawable(mEtBackgroundDrawableNormal);
                if (i < mEtNumber - 1) {
                  //step  two
                    mPwdTextViews[i + 1].setBackgroundDrawable(mEtBackgroundDrawableFocus);
                }
                break;
            }
        }
    }

如果在step one的inputComplete()方法中调用了clearInputContent();那么step two为什么还要继续设置后续的焦点背景?是不是要调换下顺序?我在使用中遇到这个问题了.

手机上当框太多的时候会超出屏幕

<com.tuo.customview.VerificationCodeView
        android:id="@+id/et_collection"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:text="3201001010004000"
        app:icv_et_number="16"
        tools:ignore="HardcodedText"/>

圆绘制小问题

当 icv_et_pwd_radius 设置 6dp 并且 icv_et_width 设置 42dp 时,绘制的圆形其中一个会变形

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.