仿微信支付密码输入框
来源:互联网 发布:天盾微信恢复软件 编辑:程序博客网 时间:2024/05/01 10:20
两种不同实现,使用系统键盘和使用自定义键盘
1.简单功能,可结合自定义键盘使用,未处理系统键盘输入
布局
<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/input1" android:layout_width="@dimen/dimen_36_dip" android:layout_height="@dimen/dimen_36_dip" android:textSize="20sp" android:textColor="#000000" android:gravity="center" android:background="@drawable/shape_bg_single_input"/> <TextView android:id="@+id/input2" android:layout_width="@dimen/dimen_36_dip" android:layout_height="@dimen/dimen_36_dip" android:layout_marginLeft="-1dp" android:textSize="20sp" android:textColor="#000000" android:gravity="center" android:background="@drawable/shape_bg_single_input"/> <TextView android:id="@+id/input3" android:layout_width="@dimen/dimen_36_dip" android:layout_height="@dimen/dimen_36_dip" android:layout_marginLeft="-1dp" android:textSize="20sp" android:textColor="#000000" android:gravity="center" android:background="@drawable/shape_bg_single_input"/> <TextView android:id="@+id/input4" android:layout_width="@dimen/dimen_36_dip" android:layout_height="@dimen/dimen_36_dip" android:layout_marginLeft="-1dp" android:textSize="20sp" android:textColor="#000000" android:gravity="center" android:background="@drawable/shape_bg_single_input"/> <TextView android:id="@+id/input5" android:layout_width="@dimen/dimen_36_dip" android:layout_height="@dimen/dimen_36_dip" android:layout_marginLeft="-1dp" android:textSize="20sp" android:textColor="#000000" android:gravity="center" android:background="@drawable/shape_bg_single_input"/> <TextView android:id="@+id/input6" android:layout_width="@dimen/dimen_36_dip" android:layout_height="@dimen/dimen_36_dip" android:layout_marginLeft="-1dp" android:textSize="20sp" android:textColor="#000000" android:gravity="center" android:background="@drawable/shape_bg_single_input"/></merge>
代码:
public class VerifyCodeView extends LinearLayout { private static final int MESSAGE_VERIFY_LENGTH = 6; private int mCurrent; private StringBuilder mMessageVerify = new StringBuilder(); private InputCompleteListener mCompleteListener; public VerifyCodeView(Context context) { super(context); init(); } public VerifyCodeView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public VerifyCodeView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { setOrientation(LinearLayout.HORIZONTAL); setGravity(Gravity.CENTER); LayoutInflater.from(getContext()).inflate(R.layout.view_single_input, this); mCurrent = 0; } public void append(String num) { if (mCurrent == MESSAGE_VERIFY_LENGTH) { return; } mMessageVerify.append(num); ((TextView) getChildAt(mCurrent)).setText(num); mCurrent++; if (mCurrent == MESSAGE_VERIFY_LENGTH && mCompleteListener != null) { mCompleteListener.onComplete(); clearContent(); return; } } public void delete() { if (mCurrent > 0) { mCurrent--; mMessageVerify.delete(mCurrent, mCurrent); ((TextView) getChildAt(mCurrent)).setText(""); } } public void clearContent() { mCurrent = 0; mMessageVerify = new StringBuilder(); for (int i = 0; i < MESSAGE_VERIFY_LENGTH; i++) { ((TextView) getChildAt(i)).setText(""); } } public String getMessage() { return mMessageVerify.toString(); } public interface InputCompleteListener { void onComplete(); } public void setCompleteListener(InputCompleteListener completeListener) { mCompleteListener = completeListener; }}
2.系统键盘输入
public class VerifyCodeView extends LinearLayout implements View.OnFocusChangeListener, TextWatcher, VerifyEditText.EmptyBackListener { private static final int MESSAGE_VERIFY_LENGTH = 6; private int mCurrent; private StringBuilder mMessageVerify = new StringBuilder(); private VerifyEditText mItem1; private VerifyEditText mItem2; private VerifyEditText mItem3; private VerifyEditText mItem4; private VerifyEditText mItem5; private VerifyEditText mItem6; public VerifyCodeView(Context context) { super(context); init(); } public VerifyCodeView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public VerifyCodeView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { setOrientation(LinearLayout.HORIZONTAL); setGravity(Gravity.CENTER); LayoutInflater.from(getContext()).inflate(R.layout.view_single_input, this); mItem1 = (VerifyEditText) findViewById(R.id.input1); initEditText(mItem1, 1); mItem2 = (VerifyEditText) findViewById(R.id.input2); initEditText(mItem2, 2); mItem3 = (VerifyEditText) findViewById(R.id.input3); initEditText(mItem3, 3); mItem4 = (VerifyEditText) findViewById(R.id.input4); initEditText(mItem4, 4); mItem5 = (VerifyEditText) findViewById(R.id.input5); initEditText(mItem5, 5); mItem6 = (VerifyEditText) findViewById(R.id.input6); initEditText(mItem6, 6); mCurrent = 0; } private void initEditText(VerifyEditText item, int tag) { item.setOnFocusChangeListener(this); item.setTag(tag); item.setListener(this); item.addTextChangedListener(this); } public void append(String num) { if (mCurrent == MESSAGE_VERIFY_LENGTH) { return; } mMessageVerify.append(num); mCurrent++; } public void delete() { if (mCurrent > 0) { mMessageVerify = mMessageVerify.deleteCharAt(mCurrent - 1); mCurrent--; } } public void clearContent() { mCurrent = 0; mMessageVerify = new StringBuilder(); for (int i = 0; i < MESSAGE_VERIFY_LENGTH; i++) { ((TextView) getChildAt(i)).setText(""); } } public String getMessage() { return mMessageVerify.toString(); } @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus && (int) v.getTag() != mCurrent) { if (mCurrent < MESSAGE_VERIFY_LENGTH) { getChildAt(mCurrent).requestFocus(); } else { getChildAt(MESSAGE_VERIFY_LENGTH - 1).requestFocus(); } } } @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 (!TextUtils.isEmpty(s.toString())) { append(s.toString()); if (mCurrent < MESSAGE_VERIFY_LENGTH) { getChildAt(mCurrent).requestFocus(); } } else if (mCurrent == MESSAGE_VERIFY_LENGTH) { delete(); EditText edt = (EditText) getChildAt(mCurrent); edt.setText(null); edt.requestFocus(); } } @Override public void onEmptyBack() { delete(); EditText edt = (EditText) getChildAt(mCurrent); edt.setText(null); edt.requestFocus(); }}
public class VerifyEditText extends AppCompatEditText { private EmptyBackListener mListener; public VerifyEditText(Context context) { super(context); } public VerifyEditText(Context context, AttributeSet attrs) { super(context, attrs); } public VerifyEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setListener(EmptyBackListener listener) { mListener = listener; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (TextUtils.isEmpty(getText()) && keyCode == KeyEvent.KEYCODE_DEL && mListener != null) { mListener.onEmptyBack(); } return super.onKeyDown(keyCode, event); } interface EmptyBackListener { void onEmptyBack(); }}
阅读全文
0 0
- 仿微信支付密码输入框
- android仿微信修改支付密码输入框
- Android 仿微信支付密码输入框
- Android 仿微信支付密码输入框
- 仿微信支付宝输入密码框
- Android之仿微信支付密码输入框
- 自定义密码输入框(仿微信支付宝支付)
- 仿微信支付宝输入支付密码
- THML输入支付密码框
- Android支付密码输入框
- 支付的密码输入框
- 自定义输入支付密码框
- 仿支付宝支付密码输入框
- 仿微信/支付宝的密码输入框效果 android
- 仿微信/支付宝的密码输入框效果 android
- 仿微信/支付宝的密码输入框效果 android
- Android仿微信/支付宝的方块密码输入框
- 仿微信/支付宝的密码输入框效果:GridPasswordView
- git升级、安装时出错,utf8.c:463: undefined reference to `libiconv'
- 无题
- UISearchBar
- 屏幕旋转状态
- Java SQLServer数据库连接(2)
- 仿微信支付密码输入框
- loadrunner下载及破解安装
- 数据结构复习——二叉排序树
- NJQ面经
- 调整数组使奇数(odd)全部都位于偶数(even)前面
- Solr模糊和精确查找
- 以太坊如何安装安装 Docker 安装 Compose
- iTextPDF无法显示中文的解决办法
- android 自定义view实现跑马灯效果