parent
a5f1960943
commit
d51ff9e71d
25 changed files with 344 additions and 2273 deletions
@ -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() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -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() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -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]; |
|
||||||
} |
|
||||||
|
|
||||||
}; |
|
||||||
} |
|
||||||
} |
|
File diff suppressed because it is too large
Load Diff
@ -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> |
@ -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> |
Loading…
Reference in new issue