类似支付宝支付密码的edittext
2016-10-13 16:13
176 查看
public class PayPwdEditText extends RelativeLayout{ private EditText editText; //文本编辑框 private Context context; private LinearLayout linearLayout; //文本密码的文本 private TextView[] textViews; //文本数组 private int pwdlength = 6; //密码长度, 默认6 private OnTextFinishListener onTextFinishListener; public PayPwdEditText(Context context) { this(context, null); } public PayPwdEditText(Context context, AttributeSet attrs) { this(context, attrs, 0); } public PayPwdEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; } /** * @param bgdrawable 背景drawable * @param pwdlength 密码长度 * @param splilinewidth 分割线宽度 * @param splilinecolor 分割线颜色 * @param pwdcolor 密码字体颜色 * @param pwdsize 密码字体大小 */ public void initStyle(int bgdrawable, int pwdlength, float splilinewidth, int splilinecolor, int pwdcolor, int pwdsize) { this.pwdlength = pwdlength; initEdit(bgdrawable); initShowInput(bgdrawable, pwdlength, splilinewidth, splilinecolor, pwdcolor, pwdsize); } /** * 初始化编辑框 * @param bgcolor */ private void initEdit(int bgcolor) { editText = new EditText(context); editText.setBackgroundResource(bgcolor); editText.setCursorVisible(false);//选中也没有光标 editText.setTextSize(0); editText.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD | InputType.TYPE_CLASS_NUMBER); editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(pwdlength)});//限制字数 editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { Editable etext = editText.getText(); Selection.setSelection(etext, etext.length());//定位光标在最后位置 } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { initDatas(s); if(s.length() == pwdlength) { if(onTextFinishListener != null) { onTextFinishListener.onFinish(s.toString().trim()); } } } }); LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); addView(editText, lp); } /** * @param bgcolor 背景drawable * @param pwdlength 密码长度 * @param slpilinewidth 分割线宽度 * @param splilinecolor 分割线颜色 * @param pwdcolor 密码字体颜色 * @param pwdsize 密码字体大小 */ public void initShowInput(int bgcolor, int pwdlength, float slpilinewidth, int splilinecolor, int pwdcolor, int pwdsize) { //添加密码框父布局 linearLayout = new LinearLayout(context); linearLayout.setBackgroundResource(bgcolor); LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); linearLayout.setLayoutParams(layoutParams); linearLayout.setOrientation(LinearLayout.HORIZONTAL); addView(linearLayout); //添加密码框 textViews = new TextView[pwdlength]; LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LayoutParams.MATCH_PARENT); params.weight = 1; params.gravity = Gravity.CENTER; LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(dip2px(context, slpilinewidth),LayoutParams.MATCH_PARENT); for(int i = 0; i < textViews.length; i++) { final int index = i; TextView textView = new TextView(context); textView.setGravity(Gravity.CENTER); textViews[i] = textView; textViews[i].setTextSize(pwdsize); textViews[i].setTextColor(context.getResources().getColor(pwdcolor)); // 设置textview的格式为数字和密码型
textViews[i].setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_VARIATION_PASSWORD); linearLayout.addView(textView, params); if(i < textViews.length - 1) { View view = new View(context); view.setBackgroundColor(context.getResources().getColor(splilinecolor)); linearLayout.addView(view, params2); } } } /** * 是否显示明文 * @param showPwd */ public void setShowPwd(boolean showPwd) { int length = textViews.length; for(int i = 0; i < length; i++) { if (showPwd) { textViews[i].setTransformationMethod(PasswordTransformationMethod.getInstance());//密码隐式 } else { textViews[i].setTransformationMethod(HideReturnsTransformationMethod.getInstance());//密码显式 } } } /** * 设置显示类型 * @param type */ public void setInputType(int type) { int length = textViews.length; for(int i = 0; i < length; i++) { textViews[i].setInputType(type); } } /** * 清除文本框 */ public void clearText() { editText.setText(""); for(int i = 0; i < pwdlength; i++) { textViews[i].setText(""); } } public void setOnTextFinishListener(OnTextFinishListener onTextFinishListener) { this.onTextFinishListener = onTextFinishListener; } /** * 根据输入字符,显示密码个数 * @param s */ public void initDatas(Editable s) { if(s.length() > 0) { int length = s.length(); for(int i = 0; i < pwdlength; i++) { if(i < length) { for(int j = 0; j < length; j++) { char ch = s.charAt(j); textViews[j].setText(String.valueOf(ch)); } } else { textViews[i].setText(""); } } } else { for(int i = 0; i < pwdlength; i++) { textViews[i].setText(""); } } } public String getPwdText() { if(editText != null) return editText.getText().toString().trim(); return ""; } public static int dip2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } public interface OnTextFinishListener { void onFinish(String str); } }
相关文章推荐
- android中6个EditText输入验证码(仿支付宝支付输入密码框)
- GridPasswordView 类似支付宝支付密码输入框
- 带格子的密码输入框,类似微信,支付宝支付时候的输入密码页面效果
- 基于JS实现类似支付宝支付密码输入框
- Android 仿支付宝密码框的EditText输入框
- 简单实现显示隐藏密码,在EditText中。
- 代码中设置EditText显示或者隐藏密码
- Android文本输入框(EditText)切换密码的显示与隐藏
- EditText动态管理密码显示与隐藏,明文与星号
- Android中设置EditText显示或隐藏密码
- 类似解锁或者支付密码输入框
- EditText实现(修改密码提示验证信息需求)
- EditText 类似搜索框的效果
- Android EditText 密码框默认是小圆点 怎么改成其它的(*)?
- 代码控制EditText是否显示密码样式
- 在EditText中显示隐藏密码
- EditText 密码显示隐藏三种方法
- 利用EditText的RightDrawable切换密码显示
- 支付宝推指纹支付 打造偷不走的密码
- android开发之设置Edittext密码的方法