简单实现支付密码的页面及输入效果

干我们这行,风吹日晒不到,就怕甲方突发奇想。

今天客户要做一个安全密码前置校验,还要做成支付宝那种效果。ps:android端

心理吐槽了一万遍以后,还是得面对现实。

先用通义问一遍,给了两个方案,要么自己写,要么用第三方库。

向来自己动手的我,先试着把通义给的源码抄下来,运行效果不佳。

转用第三方库,sync后版本又不对,找了多个库,效果都不理想,要么版本不兼容,要么效果不理想。

最后回头用通义的思路自己写。

思路分为三个步骤。

1.页面上用6个textview,用来显示黑点的效果,外加一个edittext,edittext宽高1dp,基本是隐藏的效果,edittext用来接受焦点和输入密码

java 复制代码
 		<LinearLayout
            android:id="@+id/ll_password"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:orientation="horizontal"  >
            <TextView android:id="@+id/tv1" style="@style/PwdBox" />
            <TextView android:id="@+id/tv2" style="@style/PwdBox" />
            <TextView android:id="@+id/tv3" style="@style/PwdBox" />
            <TextView android:id="@+id/tv4" style="@style/PwdBox" />
            <TextView android:id="@+id/tv5" style="@style/PwdBox" />
            <TextView android:id="@+id/tv6" style="@style/PwdBox" />
        </LinearLayout>

        <EditText android:id="@+id/password_input"
            android:inputType="number"
            android:maxLength="6"
            android:layout_width="match_parent"
            android:layout_height="1dp"></EditText>

2.点击textview,使edittext获取焦点,但是无法拉起输入键盘,要单独写拉起键盘的操作。

java 复制代码
password_input.requestFocus();
showime();
java 复制代码
private void showime(){
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.showSoftInput(password_input, InputMethodManager.SHOW_IMPLICIT);
        }
    }

3.键盘输入后,假密码框有输入效果

java 复制代码
TextWatcher commonTextWatcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {}

            @Override
            public void afterTextChanged(Editable s) { 
                Log.d("EditText", "内容变化: " + s.toString());
               String password=s.toString();
                for(int i=0;i<tvs.length;i++) {
                    tvs[i].setText("");
                }
               for(int i=0;i<password.length();i++) {
                   tvs[i].setText("●");
               }
                if(password.length()==6  ){
                    if(password.equals("000000")){ //方便书写,应该通过接口验证
                        hideime(); //隐藏键盘
                    }else{
                        //未通过验证的处理逻辑
                    }

                }
            }
        };
        password_input.addTextChangedListener(commonTextWatcher);
java 复制代码
 private void hideime(){
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        System.out.println(getCurrentFocus());
        if (imm != null && getCurrentFocus() != null) {
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }
    }

这样就搞定了,这个思路可以用到各个开发语言下。这个只是思路,具体实现还要补充不少东西。看下效果

相关推荐
灿烂阳光g19 小时前
HWC的软硬件架构
android
2501_9159214319 小时前
Charles 抓包 HTTPS 原理详解,从 CONNECT 到 SSL Proxying、常见问题与真机调试实战(含 Sniffmaster 补充方案)
android·网络协议·小程序·https·uni-app·iphone·ssl
冬天vs不冷19 小时前
Java基础(十三):内部类详解
android·java·python
AKA19 小时前
Bugly的使用
android·android studio
落叶霞枫20 小时前
【uniapp安卓原生语言插件】之华为统一扫码插件【保姆级】开发教程。
android·uni-app·android studio
wodongx12320 小时前
从零开始部署Android环境的Jenkins CI/CD流水线(docker环境,Win系统)
android·docker·jenkins
loitawu20 小时前
Rockchip平台 Android 11 到 Android 16 系统占用内存对比分析
android·ddr·内存占用·rockhip·android内存
用户20187928316720 小时前
浅谈View经GPU渲染绘制的过程
android
AD钙奶-lalala20 小时前
Android中开一个线程是ULT还是KLT
android
冬天vs不冷21 小时前
Java基础(十四):枚举类详解
android·java·python