仿淘宝支付密码界面
如上图效果:
上网查了些别人写的自定义控件,界面有些差别,自己还得重新绘画计算,干脆自己用6个edittext做算了,加些条件判断:
主要监听et的文本变化,和键盘的删除按键
1、文本长度设置最大为1嘛,然后afterTextChanged的时候判断长度是否1,是的话就更改焦点,主要是et的clearFocus()和requestFocusFromTouch(),例如et1的文本长度为1了,et1取消焦点,et2获得焦点;
2、删除按钮判断当前的et长度为0了,则应该是删除上面一个et的内容并把焦点给他
代码如下,没封装,所以很长,layout文件就自己搞了:
final Dialog dialog = new Dialog(this , R.style.CustomDialog); View view = LayoutInflater.from(this).inflate(R.layout.dialog_admin_password, null); final EditText et1 = view.findViewById(R.id.password1_et); final EditText et2 = view.findViewById(R.id.password2_et); final EditText et3 = view.findViewById(R.id.password3_et); final EditText et4 = view.findViewById(R.id.password4_et); final EditText et5 = view.findViewById(R.id.password5_et); final EditText et6 = view.findViewById(R.id.password6_et); ImageView closeIv = view.findViewById(R.id.close_iv); et1.addTextChangedListener(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){ et1.clearFocus(); et2.requestFocusFromTouch(); String password = et1.getText().toString()+et2.getText().toString()+et3.getText().toString()+et4.getText().toString()+et5.getText().toString()+et6.getText().toString(); if(password.length()==6){ if(password.equals("123456")) { Intent intent1 = new Intent(LoginActivity.this, SettingActivity.class); startActivity(intent1); dialog.dismiss(); }else { PhoneUtil.showCustomToast("密码错误!",2); et1.setText(""); et2.setText(""); et3.setText(""); et4.setText(""); et5.setText(""); et6.setText(""); et1.requestFocusFromTouch(); } } } } }); et2.addTextChangedListener(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){ et2.clearFocus(); et3.requestFocusFromTouch(); String password = et1.getText().toString()+et2.getText().toString()+et3.getText().toString()+et4.getText().toString()+et5.getText().toString()+et6.getText().toString(); if(password.length()==6){ if(password.equals("123456")) { Intent intent1 = new Intent(LoginActivity.this, SettingActivity.class); startActivity(intent1); dialog.dismiss(); }else { PhoneUtil.showCustomToast("密码错误!",2); et1.setText(""); et2.setText(""); et3.setText(""); et4.setText(""); et5.setText(""); et6.setText(""); et1.requestFocusFromTouch(); } } }else { et2.clearFocus(); et1.requestFocusFromTouch(); } } }); et3.addTextChangedListener(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){ et3.clearFocus(); et4.requestFocusFromTouch(); String password = et1.getText().toString()+et2.getText().toString()+et3.getText().toString()+et4.getText().toString()+et5.getText().toString()+et6.getText().toString(); if(password.length()==6){ if(password.equals("123456")) { Intent intent1 = new Intent(LoginActivity.this, SettingActivity.class); startActivity(intent1); dialog.dismiss(); }else { PhoneUtil.showCustomToast("密码错误!",2); et1.setText(""); et2.setText(""); et3.setText(""); et4.setText(""); et5.setText(""); et6.setText(""); et1.requestFocusFromTouch(); } } }else { et3.clearFocus(); et2.requestFocusFromTouch(); } } }); et4.addTextChangedListener(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){ et4.clearFocus(); et5.requestFocusFromTouch(); String password = et1.getText().toString()+et2.getText().toString()+et3.getText().toString()+et4.getText().toString()+et5.getText().toString()+et6.getText().toString(); if(password.length()==6){ if(password.equals("123456")) { Intent intent1 = new Intent(LoginActivity.this, SettingActivity.class); startActivity(intent1); dialog.dismiss(); }else { PhoneUtil.showCustomToast("密码错误!",2); et1.setText(""); et2.setText(""); et3.setText(""); et4.setText(""); et5.setText(""); et6.setText(""); et1.requestFocusFromTouch(); } } }else { et4.clearFocus(); et3.requestFocusFromTouch(); } } }); et5.addTextChangedListener(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){ et5.clearFocus(); et6.requestFocusFromTouch(); String password = et1.getText().toString()+et2.getText().toString()+et3.getText().toString()+et4.getText().toString()+et5.getText().toString()+et6.getText().toString(); if(password.length()==6){ if(password.equals("123456")) { Intent intent1 = new Intent(LoginActivity.this, SettingActivity.class); startActivity(intent1); dialog.dismiss(); }else { PhoneUtil.showCustomToast("密码错误!",2); et1.setText(""); et2.setText(""); et3.setText(""); et4.setText(""); et5.setText(""); et6.setText(""); et1.requestFocusFromTouch(); } } }else { et5.clearFocus(); et4.requestFocusFromTouch(); } } }); et6.addTextChangedListener(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){ String password = et1.getText().toString()+et2.getText().toString()+et3.getText().toString()+et4.getText().toString()+et5.getText().toString()+et6.getText().toString(); if(password.length()==6) { if (password.equals("123456")) { Intent intent1 = new Intent(LoginActivity.this, SettingActivity.class); startActivity(intent1); dialog.dismiss(); } else { PhoneUtil.showCustomToast("密码错误!", 2); et1.setText(""); et2.setText(""); et3.setText(""); et4.setText(""); et5.setText(""); et6.setText(""); et1.requestFocusFromTouch(); } } }else { et6.clearFocus(); et5.requestFocusFromTouch(); } } }); et1.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { return false; } }); et2.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_DEL&&event.getAction()==KeyEvent.ACTION_DOWN) { if (et2.getText().toString().length() == 0) {//et2没数据点了删除键则要删除1的数据并选中1 et2.clearFocus(); et1.setText(""); et1.requestFocusFromTouch(); } } return false; } }); et3.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_DEL&&event.getAction()==KeyEvent.ACTION_DOWN) { if (et3.getText().toString().length() == 0) { et3.clearFocus(); et2.setText(""); et2.requestFocusFromTouch(); } } return false; } }); et4.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_DEL&&event.getAction()==KeyEvent.ACTION_DOWN) { if (et4.getText().toString().length() == 0) { et4.clearFocus(); et3.setText(""); et3.requestFocusFromTouch(); } } return false; } }); et5.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_DEL&&event.getAction()==KeyEvent.ACTION_DOWN) { if (et5.getText().toString().length() == 0) { et5.clearFocus(); et4.setText(""); et4.requestFocusFromTouch(); } } return false; } }); et6.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_DEL&&event.getAction()==KeyEvent.ACTION_DOWN) { if (et6.getText().toString().length() == 0) { et6.clearFocus(); et5.setText(""); et5.requestFocusFromTouch(); } } return false; } }); closeIv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { et1.setText(""); et2.setText(""); et3.setText(""); et4.setText(""); et5.setText(""); et6.setText(""); dialog.dismiss(); } }); dialog.setContentView(view , new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT ,WindowManager.LayoutParams.MATCH_PARENT )); WindowManager windowManager = getWindowManager(); dialog.getWindow().setLayout(windowManager.getDefaultDisplay().getWidth() , windowManager.getDefaultDisplay().getHeight()); dialog.setCancelable(false); dialog.show();