验证码页面

main
huangwei 11 months ago
parent a5f1960943
commit d51ff9e71d
  1. 20
      app/src/main/AndroidManifest.xml
  2. 30
      app/src/main/java/com/project/survey/activity/login/ForgetPwdActivity.kt
  3. 25
      app/src/main/java/com/project/survey/activity/login/ForgetPwdInputCodeActivity.kt
  4. 19
      app/src/main/java/com/project/survey/activity/login/LoginActivity.kt
  5. 1
      app/src/main/java/com/project/survey/activity/login/LoginInputCodeActivity.kt
  6. 22
      app/src/main/java/com/project/survey/activity/login/SetNewPwdActivity.kt
  7. 2
      app/src/main/java/com/project/survey/util/GravityEnum.java
  8. 1
      app/src/main/java/com/project/survey/util/ThemeUtils.java
  9. 318
      app/src/main/java/com/project/survey/widget/edittext/PassEdittext2.java
  10. 1788
      app/src/main/java/com/project/survey/widget/edittext/materialedittext/MaterialEditText.java
  11. 13
      app/src/main/java/com/project/survey/widget/edittext/materialedittext/validation/METLengthChecker.java
  12. 43
      app/src/main/java/com/project/survey/widget/edittext/materialedittext/validation/METValidator.java
  13. 38
      app/src/main/java/com/project/survey/widget/edittext/materialedittext/validation/NotAllowEmptyValidator.java
  14. 31
      app/src/main/java/com/project/survey/widget/edittext/materialedittext/validation/RegexpValidator.java
  15. 5
      app/src/main/res/color/text_color_enable_sc.xml
  16. 7
      app/src/main/res/drawable/bg_btn_eanble_sc.xml
  17. 6
      app/src/main/res/drawable/bg_btn_enable.xml
  18. 6
      app/src/main/res/drawable/bg_btn_enable_not.xml
  19. 67
      app/src/main/res/layout/activity_forget_pwd.xml
  20. 40
      app/src/main/res/layout/activity_forget_pwd_input_code.xml
  21. 33
      app/src/main/res/layout/activity_login.xml
  22. 2
      app/src/main/res/layout/activity_login_input_code.xml
  23. 59
      app/src/main/res/layout/activity_set_new_pwd.xml
  24. 31
      app/src/main/res/layout/item_input_pwd.xml
  25. 10
      app/src/main/res/values/strings.xml

@ -72,6 +72,26 @@
android:label=""
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".activity.login.ForgetPwdActivity"
android:exported="true"
android:label=""
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".activity.login.ForgetPwdInputCodeActivity"
android:exported="true"
android:label=""
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".activity.login.SetNewPwdActivity"
android:exported="true"
android:label=""
android:windowSoftInputMode="adjustResize|stateHidden" />
</application>
</manifest>

@ -0,0 +1,30 @@
package com.project.survey.activity.login
import android.content.Intent
import androidx.core.widget.addTextChangedListener
import com.project.survey.activity.base.BaseBindingActivity
import com.project.survey.databinding.ActivityForgetPwdBinding
/**
* 忘记密码
*/
class ForgetPwdActivity : BaseBindingActivity<ActivityForgetPwdBinding>() {
override fun getBinding(): ActivityForgetPwdBinding {
return ActivityForgetPwdBinding.inflate(layoutInflater)
}
override fun initView() {
mBinding.etAccount.addTextChangedListener {
mBinding.tvSendCode.setEnabled(it?.isNotEmpty() == true);
}
mBinding.tvSendCode.setOnClickListener {
startActivity(Intent(this, ForgetPwdInputCodeActivity::class.java))
}
}
override fun initData() {
}
}

@ -0,0 +1,25 @@
package com.project.survey.activity.login
import android.content.Intent
import com.project.survey.activity.base.BaseBindingActivity
import com.project.survey.databinding.ActivityForgetPwdInputCodeBinding
/**
* 忘记密码后的输入验证码
*/
class ForgetPwdInputCodeActivity : BaseBindingActivity<ActivityForgetPwdInputCodeBinding>() {
override fun getBinding(): ActivityForgetPwdInputCodeBinding {
return ActivityForgetPwdInputCodeBinding.inflate(layoutInflater)
}
override fun initView() {
mBinding.etInputCode.setOnInputListener {
startActivity(Intent(this, SetNewPwdActivity::class.java))
}
}
override fun initData() {
}
}

@ -18,14 +18,14 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
}
override fun initView() {
mBinding.pwdShowHide.setOnClickListener {
mBinding.ivPwdShowHide.isSelected = !mBinding.ivPwdShowHide.isSelected
if (mBinding.ivPwdShowHide.isSelected) {
mBinding.etPwd.transformationMethod = HideReturnsTransformationMethod.getInstance()
mBinding.ilPwd.pwdShowHide.setOnClickListener {
mBinding.ilPwd.ivPwdShowHide.isSelected = !mBinding.ilPwd.ivPwdShowHide.isSelected
if (mBinding.ilPwd.ivPwdShowHide.isSelected) {
mBinding.ilPwd.etPwd.transformationMethod = HideReturnsTransformationMethod.getInstance()
} else {
mBinding.etPwd.transformationMethod = PasswordTransformationMethod.getInstance()
mBinding.ilPwd.etPwd.transformationMethod = PasswordTransformationMethod.getInstance()
}
mBinding.etPwd.setSelection(mBinding.etPwd.text?.length ?: 0)
mBinding.ilPwd.etPwd.setSelection(mBinding.ilPwd.etPwd.text?.length ?: 0)
}
mBinding.tvShowOutLogin.setOnClickListener {
@ -48,6 +48,11 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
}
}
mBinding.tvForgetPwd.setOnClickListener {
//忘记密码
startActivity(Intent(this, ForgetPwdActivity::class.java))
}
}
/**
@ -82,7 +87,7 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
}
mBinding.etAccount.text = null
mBinding.etPwd.text = null
mBinding.ilPwd.etPwd.text = null
}
override fun initData() {

@ -18,4 +18,5 @@ class LoginInputCodeActivity : BaseBindingActivity<ActivityLoginInputCodeBinding
override fun initData() {
}
}

@ -0,0 +1,22 @@
package com.project.survey.activity.login
import com.project.survey.activity.base.BaseBindingActivity
import com.project.survey.databinding.ActivitySetNewPwdBinding
/**
* 设置新密码
*/
class SetNewPwdActivity : BaseBindingActivity<ActivitySetNewPwdBinding>() {
override fun getBinding(): ActivitySetNewPwdBinding {
return ActivitySetNewPwdBinding.inflate(layoutInflater)
}
override fun initView() {
}
override fun initData() {
}
}

@ -15,7 +15,7 @@
*
*/
package com.project.survey.widget.edittext;
package com.project.survey.util;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;

@ -26,7 +26,6 @@ import androidx.core.content.ContextCompat;
import com.project.survey.R;
import com.project.survey.widget.edittext.GravityEnum;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@ -1,318 +0,0 @@
package com.project.survey.widget.edittext;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.Editable;
import android.text.TextWatcher;
import android.text.method.PasswordTransformationMethod;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatEditText;
import com.project.survey.R;
import com.project.survey.util.DensityUtils;
import com.project.survey.util.ResUtils;
public class PassEdittext2 extends androidx.appcompat.widget.AppCompatEditText {
/**
* 增大点击区域
*/
private int mExtraClickArea;
private final static int ALPHA_ICON_ENABLED = (int) (255 * 0.54f);
private final static int ALPHA_ICON_DISABLED = (int) (255 * 0.38f);
private Drawable mShowPwDrawable;
private Drawable mHidePwDrawable;
private boolean mPasswordVisible;
private boolean mShowingIcon;
private boolean mSetErrorCalled;
private boolean mHoverShowsPw;
private boolean mHandlingHoverEvent;
private PasswordTransformationMethod mTransformationMethod;
public PassEdittext2(Context context) {
this(context, null);
}
public PassEdittext2(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.PasswordEditTextStyle);
}
public PassEdittext2(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initAttrs(context, attrs, defStyleAttr);
}
public void initAttrs(Context context, AttributeSet attrs, int defStyleAttr) {
mExtraClickArea = DensityUtils.dp2px(context, 20);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.PasswordEditText, defStyleAttr, 0);
boolean useNonMonospaceFont;
boolean enableIconAlpha;
try {
mShowPwDrawable = ResUtils.getDrawableAttrRes(getContext(), typedArray, R.styleable.PasswordEditText_pet_iconShow);
if (mShowPwDrawable == null) {
mShowPwDrawable = ResUtils.getVectorDrawable(getContext(), R.drawable.pet_icon_visibility_24dp);
}
mHidePwDrawable = ResUtils.getDrawableAttrRes(getContext(), typedArray, R.styleable.PasswordEditText_pet_iconHide);
if (mHidePwDrawable == null) {
mHidePwDrawable = ResUtils.getVectorDrawable(getContext(), R.drawable.pet_icon_visibility_off_24dp);
}
mHoverShowsPw = typedArray.getBoolean(R.styleable.PasswordEditText_pet_hoverShowsPw, false);
useNonMonospaceFont = typedArray.getBoolean(R.styleable.PasswordEditText_pet_nonMonospaceFont, false);
enableIconAlpha = typedArray.getBoolean(R.styleable.PasswordEditText_pet_enableIconAlpha, true);
boolean isAsteriskStyle = typedArray.getBoolean(R.styleable.PasswordEditText_pet_isAsteriskStyle, false);
if (isAsteriskStyle) {
mTransformationMethod = AsteriskPasswordTransformationMethod.getInstance();
} else {
mTransformationMethod = PasswordTransformationMethod.getInstance();
}
} finally {
typedArray.recycle();
}
if (enableIconAlpha) {
mHidePwDrawable.setAlpha(ALPHA_ICON_ENABLED);
mShowPwDrawable.setAlpha(ALPHA_ICON_DISABLED);
}
// if (useNonMonospaceFont) {
// setTypeface(Typeface.DEFAULT);
// }
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence seq, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() > 0) {
if (mSetErrorCalled) {
setCompoundDrawablesRelative(null, null, null, null);
mSetErrorCalled = false;
showPasswordVisibilityIndicator(true);
}
if (!mShowingIcon) {
showPasswordVisibilityIndicator(true);
}
} else {
// hides the indicator if no text inside text field
mPasswordVisible = false;
handlePasswordInputVisibility();
showPasswordVisibilityIndicator(false);
}
}
});
handlePasswordInputVisibility();
}
public PassEdittext2 setExtraClickAreaSize(int extraClickArea) {
mExtraClickArea = extraClickArea;
return this;
}
/**
* 设置密码输入框的样式
*
* @param transformationMethod
* @return
*/
public PassEdittext2 setPasswordTransformationMethod(PasswordTransformationMethod transformationMethod) {
mTransformationMethod = transformationMethod;
return this;
}
/**
* 设置密码输入框的样式
*
* @param isAsteriskStyle
* @return
*/
public PassEdittext2 setIsAsteriskStyle(boolean isAsteriskStyle) {
if (isAsteriskStyle) {
mTransformationMethod = AsteriskPasswordTransformationMethod.getInstance();
} else {
mTransformationMethod = PasswordTransformationMethod.getInstance();
}
return this;
}
private boolean isRtl() {
return getLayoutDirection() == LAYOUT_DIRECTION_RTL;
}
@Override
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
return new PassEdittext2.SavedState(superState, mShowingIcon, mPasswordVisible);
}
@Override
public void onRestoreInstanceState(Parcelable state) {
PasswordEditText.SavedState savedState = (PasswordEditText.SavedState) state;
super.onRestoreInstanceState(savedState.getSuperState());
mShowingIcon = savedState.isShowingIcon();
mPasswordVisible = savedState.isPasswordVisible();
handlePasswordInputVisibility();
showPasswordVisibilityIndicator(mShowingIcon);
}
@Override
public void setError(CharSequence error) {
super.setError(error);
mSetErrorCalled = true;
}
@Override
public void setError(CharSequence error, Drawable icon) {
super.setError(error, icon);
mSetErrorCalled = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!mShowingIcon) {
return super.onTouchEvent(event);
} else {
boolean touchable = isTouchable(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (mHoverShowsPw) {
if (touchable) {
togglePasswordIconVisibility();
// prevent keyboard from coming up
event.setAction(MotionEvent.ACTION_CANCEL);
mHandlingHoverEvent = true;
}
}
break;
case MotionEvent.ACTION_UP:
if (mHandlingHoverEvent || touchable) {
togglePasswordIconVisibility();
// prevent keyboard from coming up
event.setAction(MotionEvent.ACTION_CANCEL);
mHandlingHoverEvent = false;
}
break;
default:
break;
}
return super.onTouchEvent(event);
}
}
private boolean isTouchable(MotionEvent event) {
boolean touchable;
if (isRtl()) {
touchable = event.getX() > getPaddingLeft() - mExtraClickArea && event.getX() < getPaddingLeft() + mShowPwDrawable.getIntrinsicWidth() + mExtraClickArea;
} else {
touchable = event.getX() > getWidth() - getPaddingRight() - mShowPwDrawable.getIntrinsicWidth() - mExtraClickArea && event.getX() < getWidth() - getPaddingRight() + mExtraClickArea;
}
return touchable;
}
private void showPasswordVisibilityIndicator(boolean shouldShowIcon) {
if (shouldShowIcon) {
Drawable drawable = mPasswordVisible ? mShowPwDrawable : mHidePwDrawable;
mShowingIcon = true;
setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, drawable, null);
} else {
// reset drawable
setCompoundDrawablesRelative(null, null, null, null);
mShowingIcon = false;
}
}
/**
* This method toggles the visibility of the icon and takes care of switching the input type
* of the view to be able to see the password afterwards.
* <p>
* This method may only be called if there is an icon visible
*/
private void togglePasswordIconVisibility() {
mPasswordVisible = !mPasswordVisible;
handlePasswordInputVisibility();
showPasswordVisibilityIndicator(true);
}
/**
* This method is called when restoring the state (e.g. on orientation change)
*/
private void handlePasswordInputVisibility() {
int selectionStart = getSelectionStart();
int selectionEnd = getSelectionEnd();
if (mPasswordVisible) {
setTransformationMethod(null);
} else {
setTransformationMethod(mTransformationMethod);
}
setSelection(selectionStart, selectionEnd);
}
/**
* Convenience class to save / restore the state of icon.
*/
protected static class SavedState extends BaseSavedState {
private final boolean mShowingIcon;
private final boolean mPasswordVisible;
private SavedState(Parcelable superState, boolean sI, boolean pV) {
super(superState);
mShowingIcon = sI;
mPasswordVisible = pV;
}
private SavedState(Parcel in) {
super(in);
mShowingIcon = in.readByte() != 0;
mPasswordVisible = in.readByte() != 0;
}
public boolean isShowingIcon() {
return mShowingIcon;
}
public boolean isPasswordVisible() {
return mPasswordVisible;
}
@Override
public void writeToParcel(Parcel destination, int flags) {
super.writeToParcel(destination, flags);
destination.writeByte((byte) (mShowingIcon ? 1 : 0));
destination.writeByte((byte) (mPasswordVisible ? 1 : 0));
}
public static final Creator<PassEdittext2.SavedState> CREATOR = new Creator<PassEdittext2.SavedState>() {
@Override
public PassEdittext2.SavedState createFromParcel(Parcel in) {
return new PassEdittext2.SavedState(in);
}
@Override
public PassEdittext2.SavedState[] newArray(int size) {
return new PassEdittext2.SavedState[size];
}
};
}
}

@ -1,13 +0,0 @@
package com.project.survey.widget.edittext.materialedittext.validation;
/**
* 长度验证
*
* @author xuexiang
* @since 2018/11/26 下午5:06
*/
public abstract class METLengthChecker {
public abstract int getLength(CharSequence text);
}

@ -1,43 +0,0 @@
package com.project.survey.widget.edittext.materialedittext.validation;
import androidx.annotation.NonNull;
/**
* 自定义校验器
*
* @author xuexiang
* @since 2018/11/26 下午5:06
*/
public abstract class METValidator {
/**
* Error message that the view will display if validation fails.
* <p/>
* This is protected, so you can change this dynamically in your {@link #isValid(CharSequence, boolean)}
* implementation. If necessary, you can also interact with this via its getter and setter.
*/
protected String errorMessage;
public METValidator(@NonNull String errorMessage) {
this.errorMessage = errorMessage;
}
public void setErrorMessage(@NonNull String errorMessage) {
this.errorMessage = errorMessage;
}
@NonNull
public String getErrorMessage() {
return this.errorMessage;
}
/**
* Abstract method to implement your own validation checking.
*
* @param text The CharSequence representation of the text in the EditText field. Cannot be null, but may be empty.
* @param isEmpty Boolean indicating whether or not the text param is empty
* @return True if valid, false if not
*/
public abstract boolean isValid(@NonNull CharSequence text, boolean isEmpty);
}

@ -1,38 +0,0 @@
/*
* Copyright (C) 2019 xuexiangjys(xuexiangjys@163.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.project.survey.widget.edittext.materialedittext.validation;
import androidx.annotation.NonNull;
/**
* 非空检验
*
* @author xuexiang
* @since 2019/5/14 10:27
*/
public class NotAllowEmptyValidator extends METValidator {
public NotAllowEmptyValidator(@NonNull String errorMessage) {
super(errorMessage);
}
@Override
public boolean isValid(@NonNull CharSequence text, boolean isEmpty) {
return !isEmpty;
}
}

@ -1,31 +0,0 @@
package com.project.survey.widget.edittext.materialedittext.validation;
import androidx.annotation.NonNull;
import java.util.regex.Pattern;
/**
* 正则表达式验证
*
* @author xuexiang
* @since 2018/11/26 下午5:06
*/
public class RegexpValidator extends METValidator {
private Pattern pattern;
public RegexpValidator(@NonNull String errorMessage, @NonNull String regex) {
super(errorMessage);
pattern = Pattern.compile(regex);
}
public RegexpValidator(@NonNull String errorMessage, @NonNull Pattern pattern) {
super(errorMessage);
this.pattern = pattern;
}
@Override
public boolean isValid(@NonNull CharSequence text, boolean isEmpty) {
return pattern.matcher(text).matches();
}
}

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_enabled="true" />
<item android:color="#A5A8AA" android:state_enabled="false" />
</selector>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_btn_enable" android:state_enabled="true" />
<item android:drawable="@drawable/bg_btn_enable_not" android:state_enabled="false" />
</selector>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/sw_99dp" />
<solid android:color="#396BD0" />
</shape>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/sw_99dp" />
<solid android:color="#E8EAEE" />
</shape>

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/toolbar" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_12dp"
android:text="@string/authentication"
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_20sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_6dp"
android:text="@string/please_input_username"
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_48dp"
android:text="@string/account"
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_11sp" />
<EditText
android:id="@+id/etAccount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:text=""
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_14sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_48dp"
android:gravity="end"
android:orientation="horizontal">
<TextView
android:id="@+id/tvSendCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_btn_eanble_sc"
android:enabled="false"
android:paddingHorizontal="@dimen/sw_20dp"
android:paddingVertical="@dimen/sw_6dp"
android:text="@string/send_the_verification_code"
android:textColor="@color/text_color_enable_sc" />
</LinearLayout>
</LinearLayout>

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/toolbar" />
<TextView
android:id="@+id/tvAccountDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_12dp"
android:text="@string/please_input_code"
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_20sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_6dp"
android:text="@string/the_verification_code_was_sent_for_forget_pwd"
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_14sp" />
<com.project.survey.widget.edittext.verificationcode.SerialnumberLayout
android:id="@+id/etInputCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_24dp"
app:code_number="6"
app:line_color_default="@color/c_dfdfdf"
app:line_color_focus="@color/colorPrimary" />
</LinearLayout>

@ -59,36 +59,9 @@
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_11sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/etPwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_14sp" />
<FrameLayout
android:id="@+id/pwdShowHide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:padding="@dimen/sw_12dp">
<ImageView
android:id="@+id/ivPwdShowHide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_pwd_sc" />
</FrameLayout>
</RelativeLayout>
<include
android:id="@+id/ilPwd"
layout="@layout/item_input_pwd" />
<TextView
android:id="@+id/tvError"

@ -23,7 +23,7 @@
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_6dp"
android:text="@string/the_verification_code_was_sent_to_phone"
android:text="@string/the_verification_code_was_sent_for_login"
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_14sp" />

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/toolbar" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_12dp"
android:orientation="vertical"
android:paddingHorizontal="@dimen/sw_22dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/set_new_password"
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_20sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_6dp"
android:text="@string/please_enter_new_password"
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_40dp"
android:text="@string/password"
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_11sp" />
<include
android:id="@+id/ilPwdOne"
layout="@layout/item_input_pwd" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_24dp"
android:text="@string/confirm_password"
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_11sp" />
<include
android:id="@+id/ilPwdTwo"
layout="@layout/item_input_pwd" />
</LinearLayout>
</LinearLayout>

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/etPwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_14sp" />
<FrameLayout
android:id="@+id/pwdShowHide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:padding="@dimen/sw_12dp">
<ImageView
android:id="@+id/ivPwdShowHide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_pwd_sc" />
</FrameLayout>
</RelativeLayout>

@ -39,7 +39,13 @@
<string name="xui_met_input_error" translatable="false">输入不符合要求!</string>
<string name="xui_met_not_allow_empty" translatable="false">输入不能为空!</string>
<string name="please_input_code">请输入验证码</string>
<string name="the_verification_code_was_sent_to_phone">验证码已发送至%1$s的手机,如您已更换手机,请联系管理员。</string>
<string name="the_verification_code_was_sent_for_login">验证码已发送至%1$s的手机,如您已更换手机,请联系管理员。</string>
<string name="the_verification_code_was_sent_for_forget_pwd">验证码已发送至%1$s的手机,请输入6位数验证码。</string>
<string name="authentication">身份验证</string>
<string name="please_input_username">请输入账号。</string>
<string name="send_the_verification_code">发送验证码</string>
<string name="set_new_password">设置新密码</string>
<string name="please_enter_new_password">请输入新的密码。</string>
<string name="confirm_password">确认密码</string>
</resources>
Loading…
Cancel
Save