zoukankan      html  css  js  c++  java
  • 手机号,银行卡号等自动分组显示的输入框

    代码地址如下:
    http://www.demodashi.com/demo/14752.html

    前言

    在android开发中,我们经常会遇到手机号,银行卡号,税号等长串数字或字母,为了视觉上的简洁化,需要4个一组分组显示,今天就讲讲这个功能的实现和使用。

    今天涉及的内容有:

    1. 原理分析
    2. 小写转大写的类UpperCaseTransform
    3. 封装类CrEditText的介绍和使用
    4. 项目结构图和效果图
    一. 原理分析

    鉴于要实现四字分隔的情况,那么就需要监听 editText 的输入过程,即需要实现 TextWatcher 接口,然后在监听输入过程中去改变需要显示的内容。
    在这里我们封装了一个CrEditText类,其内部有一个
    CardWatcher实现TextWatcher接口,并实现4字一组的主要逻辑

    二. 小写转大写的类UpperCaseTransform

    一般卡号可能是纯数字,也可能是数字和字母组合,当涉及到字母的时候,一般字母都是大写的,那么为了方便用户输入,我们需要一个将字母小写转大写的类UpperCaseTransform,现在给出UpperCaseTransform代码:

    //首先是小写转大写的方法
    public class UpperCaseTransform extends ReplacementTransformationMethod {
        @Override
        protected char[] getOriginal() {
            char[] aa = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
            return aa;
        }
    
        @Override
        protected char[] getReplacement() {
            char[] cc = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
            return cc;
        }
    }
    
    三. 封装类CrEditText的介绍和使用

    首先涉及到小写字母转大写的设置:

    //设置小写转换大写
    mEdtTest.setTransformationMethod(new UpperCaseTransform());
    

    若小获取CrEditText中输入数据,你可以这样:

    String text=mEdtTest.getDifferString();
    

    下面给出CrEditText在MainActivity中的使用范例:

    public class MainActivity extends BaseActivity{
    
        @BindView(R.id.edt_test)
        CrEditText mEdtTest;
        @BindView(R.id.btn_content)
        Button mBtnContent;
    
        @Override
        public int getContentViewId() {
            return R.layout.activity_main;
        }
    
        @Override
        public void initData() {
            //设置小写转换大写
            mEdtTest.setTransformationMethod(new UpperCaseTransform());
        }
    
        @Override
        public void setListener() {
            mBtnContent.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            super.onClick(v);
           switch (v.getId()) {
              case R.id.btn_content://获取数据
                  String text=mEdtTest.getDifferString();
                  LogUtil.i("=====输入框中数据====text="+text);
                  showShort("=====输入框中数据: "+text);
                  break;
              default:
                  break;
            }
        }
    
        private void showShort(String msg){
            ToastUtil.shortShow(mContext,msg);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
        }
    }
    

    MainActivity对应的activity_main.xml代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        tools:context="com.android.testdemo.main.MainActivity">
    
    
        <com.android.testdemo.function.CrEditText
            android:id="@+id/edt_test"
            android:layout_width="@dimen/dp_0"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="80dp"
            android:layout_weight="1.0"
            android:background="@null"
            android:digits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
            android:gravity="center_vertical|right"
            android:hint="请填写纳税人识别号"
            android:inputType="textVisiblePassword"
            android:maxLength="24"
            android:paddingBottom="@dimen/dp_15"
            android:paddingTop="@dimen/dp_15"
            android:textColor="@color/black"
            android:textColorHint="@color/color_aeaeae"
            android:textSize="@dimen/sp_14"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <Button
            android:id="@+id/btn_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="50dp"
            android:text="Button"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/edt_test" />
    
    
    </android.support.constraint.ConstraintLayout>
    
    

    其中最为重要的是,你一定要设置 “android:maxLength="24"”属性,不然会没有效果。

    四. 项目结构图和效果图

    项目结构图

    效果图

    手机号,银行卡号等自动分组显示的输入框

    代码地址如下:
    http://www.demodashi.com/demo/14752.html

  • 相关阅读:
    js替换问题replace和replaceAll
    CSS截取标题...
    MVC FormCollection collection
    IE和FF判断浏览器是否安装了flash插件
    Uploadify上传插件不兼容FF、Chrome等Netscape浏览器
    jquery错误消息: “Date”未定义,“String”未定义
    正则表达式取出指定字符窜之间的字符窜
    WPF 开发前学习(二)
    WPF 中的树应用
    WCF 数据传输遇到的问题
  • 原文地址:https://www.cnblogs.com/demodashi/p/10480187.html
Copyright © 2011-2022 走看看