diff --git a/simple/src/main/res/layout/activity_main.xml b/simple/src/main/res/layout/activity_main.xml index 4dd6101..31cdc7c 100644 --- a/simple/src/main/res/layout/activity_main.xml +++ b/simple/src/main/res/layout/activity_main.xml @@ -16,7 +16,22 @@ android:orientation="horizontal" app:vcv_et_bg="@drawable/et_login_code" app:vcv_et_cursor="@drawable/et_cursor" - app:vcv_et_inputType="number" + app:vcv_et_inputType="numberPassword" + app:vcv_et_number="4" + app:vcv_et_text_color="@android:color/black" + app:vcv_et_text_size="6sp" /> + + @@ -34,7 +49,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:onClick="clear" android:layout_marginTop="20dp" + android:onClick="clear" android:text="清空输入框" /> diff --git a/verificationcodeview/src/main/java/com/jyn/vcview/VerificationCodeView.java b/verificationcodeview/src/main/java/com/jyn/vcview/VerificationCodeView.java index bf760a5..6bcb2b0 100644 --- a/verificationcodeview/src/main/java/com/jyn/vcview/VerificationCodeView.java +++ b/verificationcodeview/src/main/java/com/jyn/vcview/VerificationCodeView.java @@ -9,6 +9,7 @@ import android.text.InputFilter; import android.text.InputType; import android.text.TextWatcher; import android.util.AttributeSet; +import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; @@ -60,6 +61,8 @@ public class VerificationCodeView extends LinearLayout implements TextWatcher, V */ private int mEtTextBg; + private boolean cursorVisible; + private int mCursorDrawable; public OnCodeFinishListener getOnCodeFinishListener() { @@ -127,9 +130,22 @@ public class VerificationCodeView extends LinearLayout implements TextWatcher, V } public enum VCInputType { + /** + * 数字类型 + */ NUMBER, + + /** + * 数字密码 + */ NUMBERPASSWORD, + /** + * 文字 + */ TEXT, + /** + * 文字密码 + */ TEXTPASSWORD, } @@ -141,12 +157,13 @@ public class VerificationCodeView extends LinearLayout implements TextWatcher, V mEtNumber = typedArray.getInteger(R.styleable.vericationCodeView_vcv_et_number, 4); int inputType = typedArray.getInt(R.styleable.vericationCodeView_vcv_et_inputType, VCInputType.NUMBER.ordinal()); mEtInputType = VCInputType.values()[inputType]; + Log.i("main", "mEtInputType:" + mEtInputType); mEtWidth = typedArray.getDimensionPixelSize(R.styleable.vericationCodeView_vcv_et_width, 120); mEtTextColor = typedArray.getColor(R.styleable.vericationCodeView_vcv_et_text_color, Color.BLACK); mEtTextSize = typedArray.getDimensionPixelSize(R.styleable.vericationCodeView_vcv_et_text_size, 16); mEtTextBg = typedArray.getResourceId(R.styleable.vericationCodeView_vcv_et_bg, R.drawable.et_login_code); mCursorDrawable = typedArray.getResourceId(R.styleable.vericationCodeView_vcv_et_cursor, R.drawable.et_cursor); - + cursorVisible = typedArray.getBoolean(R.styleable.vericationCodeView_vcv_et_cursor_visible, true); //释放资源 typedArray.recycle(); initView(); @@ -177,10 +194,11 @@ public class VerificationCodeView extends LinearLayout implements TextWatcher, V editText.setLayoutParams(layoutParams); editText.setGravity(Gravity.CENTER); editText.setId(i); - editText.setCursorVisible(true); + editText.setCursorVisible(false); editText.setMaxEms(1); editText.setTextColor(mEtTextColor); editText.setTextSize(mEtTextSize); + editText.setCursorVisible(true); editText.setMaxLines(1); editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(1)}); switch (mEtInputType) { @@ -204,11 +222,13 @@ public class VerificationCodeView extends LinearLayout implements TextWatcher, V editText.setBackgroundResource(mEtTextBg); //修改光标的颜色(反射) - try { - Field f = TextView.class.getDeclaredField("mCursorDrawableRes"); - f.setAccessible(true); - f.set(editText, mCursorDrawable); - } catch (Exception ignored) { + if (cursorVisible) { + try { + Field f = TextView.class.getDeclaredField("mCursorDrawableRes"); + f.setAccessible(true); + f.set(editText, mCursorDrawable); + } catch (Exception ignored) { + } } editText.addTextChangedListener(this); editText.setOnFocusChangeListener(this); @@ -260,7 +280,9 @@ public class VerificationCodeView extends LinearLayout implements TextWatcher, V for (int i = 0; i < count; i++) { editText = (EditText) getChildAt(i); if (editText.getText().length() < 1) { - editText.setCursorVisible(true); + if (cursorVisible) { + editText.setCursorVisible(true); + } editText.requestFocus(); return; } else { @@ -281,7 +303,9 @@ public class VerificationCodeView extends LinearLayout implements TextWatcher, V editText = (EditText) getChildAt(i); if (editText.getText().length() >= 1) { editText.setText(""); - editText.setCursorVisible(true); + if (cursorVisible) { + editText.setCursorVisible(true); + } editText.requestFocus(); return; } diff --git a/verificationcodeview/src/main/res/values/attrs.xml b/verificationcodeview/src/main/res/values/attrs.xml index df88c5d..a626d99 100644 --- a/verificationcodeview/src/main/res/values/attrs.xml +++ b/verificationcodeview/src/main/res/values/attrs.xml @@ -21,5 +21,7 @@ + + \ No newline at end of file