Edittext实现密码输入框

来源:互联网 发布:网络主播经纪公司注册 编辑:程序博客网 时间:2024/05/16 15:20

最近用到了两种类型的密码框,其中一类是下划线类型的,要能够实现连续输入,连续删除操作,这个要求edittext输入时焦点后移,删除时焦点前移。话不多说,直接贴代码:

输入完6位密码自动提示:
 public class MainActivity extends AppCompatActivity {    private UnderLineView3 mInputView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        mInputView = (UnderLineView3) findViewById(R.id.input_pwd);        mInputView.setOnFinishListener(new UnderLineView3.FinishInputListener() {            @Override            public void onFinish(String code) {                Toast.makeText(MainActivity.this, "您输入的密码为:" + code, Toast.LENGTH_LONG).show();            }        });    }
其中自定义密码输入框为:
 public class UnderLineView3 extends RelativeLayout implements View.OnKeyListener {    private Context mContext;    private EditText et_one, et_two, et_three, et_four, et_five, et_six;    public UnderLineView3(Context context) {        this(context, null);    }    public UnderLineView3(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public UnderLineView3(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        this.mContext = context;        LayoutInflater.from(mContext).inflate(R.layout.cvv2_underline_view3, this);        init();    }    private void init() {        et_one = (EditText) findViewById(R.id.et_pay1);        et_two = (EditText) findViewById(R.id.et_pay2);        et_three = (EditText) findViewById(R.id.et_pay3);        et_four = (EditText) findViewById(R.id.et_pay4);        et_five = (EditText) findViewById(R.id.et_pay5);        et_six = (EditText) findViewById(R.id.et_pay6);        et_one.addTextChangedListener(mTextWatcher);        et_two.addTextChangedListener(mTextWatcher);        et_three.addTextChangedListener(mTextWatcher);        et_four.addTextChangedListener(mTextWatcher);        et_five.addTextChangedListener(mTextWatcher);        et_six.addTextChangedListener(mTextWatcher);        et_one.setOnKeyListener(this);        et_two.setOnKeyListener(this);        et_three.setOnKeyListener(this);        et_four.setOnKeyListener(this);        et_five.setOnKeyListener(this);        et_six.setOnKeyListener(this);    }    private TextWatcher mTextWatcher = 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) {            if (s.toString().length() == 1) {                if (et_one.isFocused() && TextUtils.isEmpty(et_two.getText().toString())) {                    et_one.clearFocus();                    et_two.requestFocus();                } else if (et_two.isFocused() && TextUtils.isEmpty(et_three.getText().toString())) {                    et_two.clearFocus();                    et_three.requestFocus();                } else if (et_three.isFocused()) {                    et_four.requestFocus();                    et_three.clearFocus();                } else if (et_four.isFocused() && TextUtils.isEmpty(et_five.getText().toString())) {                    et_five.requestFocus();                    et_four.clearFocus();                } else if (et_five.isFocused() && TextUtils.isEmpty(et_six.getText().toString())) {                    et_six.requestFocus();                    et_five.clearFocus();                } else if (et_six.isFocused()) {                    et_six.requestFocus();                }            }            checkInput();        }    };    private void checkInput() {        if (!TextUtils.isEmpty(et_one.getText().toString().trim()) && !TextUtils.isEmpty(et_two.getText().toString().trim()) &&                !TextUtils.isEmpty(et_three.getText().toString().trim()) && !TextUtils.isEmpty(et_four.getText().toString().trim()) && !TextUtils.isEmpty(et_five.getText().toString().trim()) &&                !TextUtils.isEmpty(et_six.getText().toString().trim())) {            mListener.onFinish(getStr());        }    }    private String getStr() {        return et_one.getText().toString().trim() + et_two.getText().toString().trim() + et_three.getText().toString().trim()+et_four.getText().toString().trim()+et_five.getText().toString().trim()+et_six.getText().toString().trim();    }    @Override    public boolean onKey(View v, int keyCode, KeyEvent event) {        if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DEL) {            if (et_six.isFocused()) {                et_five.requestFocus();                et_six.setText("");            } else if (et_five.isFocused()) {                et_four.requestFocus();                et_five.setText("");            } else if (et_four.isFocused()) {                et_three.requestFocus();                et_four.setText("");            } else if (et_three.isFocused()) {                et_two.requestFocus();                et_three.setText("");            } else if (et_two.isFocused()) {                et_one.requestFocus();                et_two.setText("");            } else if (et_one.isFocused()) {                et_one.setText("");                et_one.requestFocus();            }            return true;        }        return false;    }    public FinishInputListener mListener;    public void setOnFinishListener(FinishInputListener listener) {        this.mListener = listener;    }    public interface FinishInputListener {        void onFinish(String code);    }}

最终效果:

这里写图片描述

下载链接:密码框下载

1 0
原创粉丝点击