Android 简单密码框

效果(不会手机录制gif。。。所以。。。):

代码:

package com.example.xinenhuadaka.signin.ui;

import android.app.Activity;
import android.content.Intent;
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;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.xinenhuadaka.R;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class CodeActivity extends Activity{

    @BindView(R.id.iv_return)
    ImageView ivReturn;
    @BindView(R.id.tv_phone)
    TextView tvPhone;
    @BindView(R.id.et1)
    EditText et1;
    @BindView(R.id.et2)
    EditText et2;
    @BindView(R.id.et3)
    EditText et3;
    @BindView(R.id.et4)
    EditText et4;
    @BindView(R.id.tv_time)
    TextView tvTime;

    private String phone;
    private List<EditText> mEdits = new ArrayList<EditText>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_code);
        ButterKnife.bind(this);
        Intent intent = getIntent();
        phone = intent.getStringExtra("phone");
        init();
    }

    //初始化
    private void init() {
        Log.i("phone",phone);
        tvPhone.setText("+86 "+phone.substring(0,3)+"-"+phone.substring(3,6)+"-"+phone.substring(6,phone.length()));
        et1.setFocusable(true);
        et1.setFocusableInTouchMode(true);
        mEdits.add(et1);
        mEdits.add(et2);
        mEdits.add(et3);
        mEdits.add(et4);
        et1.addTextChangedListener(new MyTextWatcher());
        et2.addTextChangedListener(new MyTextWatcher());
        et3.addTextChangedListener(new MyTextWatcher());
        et4.addTextChangedListener(new MyTextWatcher());
        et1.setOnKeyListener(new MyOnKeyListener());
        et2.setOnKeyListener(new MyOnKeyListener());
        et3.setOnKeyListener(new MyOnKeyListener());
        et4.setOnKeyListener(new MyOnKeyListener());
    }

    @OnClick({R.id.iv_return, R.id.tv_time})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.iv_return:
                finish();
                break;
            case R.id.tv_time:

                break;
        }
    }
    private class MyOnKeyListener implements View.OnKeyListener{

        @Override
        public boolean onKey(View view, int i, KeyEvent keyEvent) {
            if (i == KeyEvent.KEYCODE_DEL && keyEvent.getAction() == KeyEvent.ACTION_DOWN) {

                for (int i1=0;i1<mEdits.size();i1++){//遍历 确定是哪个输入框删除了内容
                    EditText editText = mEdits.get(i1);
                    if(editText.getText().toString().equals("")){//除了第一个和最后一个输入框   其他输入框 都要把焦点切换到上一个输入框,同时把上一个输入框的内容删掉
                        if(i1==0){//第一个 只删除内容
                            editText.setText("");
                            return true;
                        }
                        editText.setFocusable(false);
                        mEdits.get(i1-1).setText("");
                        mEdits.get(i1-1).setEnabled(true);
                        mEdits.get(i1-1).setFocusableInTouchMode(true);
                        mEdits.get(i1-1).requestFocus();
                        return true;
                    }
                }
                mEdits.get(mEdits.size()-1).setText("");
                return true;
            }
            return false;
        }
    }
    private class MyTextWatcher implements TextWatcher {

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable) {
            StringBuffer strText=new StringBuffer("");//验证码
            if (editable.length() != 0) {//判断是输入还是删除
                for (int i=0;i<mEdits.size();i++){//遍历 确定是哪个输入框输入了内容
                    EditText editText = mEdits.get(i);
                    if(mEdits.get(i).getText().toString().equals("")){//当前为空,上一个输入框的焦点应切换到当前这个
                        mEdits.get(i-1).setFocusable(false);//上一个输入框失去焦点
                        //当前的输入框获得焦点,等待输入
                        editText.setEnabled(true);
                        editText.setFocusableInTouchMode(true);
                        editText.requestFocus();
                        strText.delete(0,strText.length());//如果需要切换焦点则清空验证码
                        return;
                    }
                    strText.append(mEdits.get(i).getText().toString());//记录验证码
                }
                //遍历完 无切换 得到验证码
                Toast.makeText(CodeActivity.this, strText, Toast.LENGTH_SHORT).show();

            }
        }
    }
}

布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"
    tools:context=".signin.ui.CodeActivity">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:ignore="MissingConstraints"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginTop="34dp"
        android:layout_marginLeft="19dp"
        android:id="@+id/iv_return"
        android:src="@mipmap/back"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/iv_return"
        app:layout_constraintLeft_toLeftOf="@id/iv_return"
        android:text="请输入验证码"
        android:textSize="25dp"
        android:textColor="@color/colorTvBlack"
        android:layout_marginTop="52dp"
        android:layout_marginLeft="32dp"
        android:id="@+id/tv1"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/tv1"
        app:layout_constraintLeft_toLeftOf="@id/tv1"
        android:text="验证码已发送至手机:"
        android:textSize="12dp"
        android:textColor="@color/colorTvBlack"
        android:layout_marginTop="13dp"
        android:id="@+id/tv2"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="@id/tv2"
        app:layout_constraintLeft_toRightOf="@id/tv2"
        android:textSize="13dp"
        android:textColor="#E83452"
        android:text="+86 183-3405-3875"
        android:layout_marginLeft="8dp"
        android:id="@+id/tv_phone"
        />
    <EditText
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@id/tv2"
        app:layout_constraintLeft_toLeftOf="@id/tv2"
        app:layout_constraintRight_toLeftOf="@id/et2"
        android:layout_marginTop="50dp"
        app:layout_constraintDimensionRatio="1:1"
        android:id="@+id/et1"
        android:textSize="30dp"
        android:textColor="@color/colorTvBlack"
        android:gravity="center"
        android:maxLength="1"
        android:inputType="number"/>
    <EditText
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@id/tv2"
        app:layout_constraintLeft_toRightOf="@id/et1"
        app:layout_constraintRight_toLeftOf="@id/et3"
        android:layout_marginTop="50dp"
        app:layout_constraintDimensionRatio="1:1"
        android:layout_marginLeft="12dp"
        android:id="@+id/et2"
        android:textSize="30dp"
        android:textColor="@color/colorTvBlack"
        android:gravity="center"
        android:maxLength="1"
        android:inputType="number"/>
    <EditText
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@id/tv2"
        app:layout_constraintLeft_toRightOf="@id/et2"
        app:layout_constraintRight_toLeftOf="@id/et4"
        android:layout_marginTop="50dp"
        app:layout_constraintDimensionRatio="1:1"
        android:layout_marginLeft="12dp"
        android:id="@+id/et3"
        android:textSize="30dp"
        android:textColor="@color/colorTvBlack"
        android:gravity="center"
        android:maxLength="1"
        android:inputType="number"/>
    <EditText
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@id/tv2"
        app:layout_constraintLeft_toRightOf="@id/et3"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginTop="50dp"
        app:layout_constraintDimensionRatio="1:1"
        android:layout_marginLeft="12dp"
        android:id="@+id/et4"
        android:layout_marginRight="36dp"
        android:textSize="30dp"
        android:textColor="@color/colorTvBlack"
        android:gravity="center"
        android:maxLength="1"
        android:inputType="number"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/et1"
        app:layout_constraintLeft_toLeftOf="@id/et1"
        android:layout_marginTop="12dp"
        android:id="@+id/tv_time"
        android:textColor="#596168"
        android:textSize="13dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="@id/tv_time"
        app:layout_constraintLeft_toRightOf="@id/tv_time"
        android:text="后重发验证码或通过其他途径验证"
        android:textColor="#596168"
        android:textSize="13dp"
        />
</androidx.constraintlayout.widget.ConstraintLayout>
发布了15 篇原创文章 · 获赞 2 · 访问量 5240

猜你喜欢

转载自blog.csdn.net/qq_41985689/article/details/102784931
今日推荐