인증 기능이 있는 TextInputLayout 설치 방법
개요
안드로이드를 확장한 텍스트 인풋 Layout은 발리 기능이 있는 Validation Text Input Layout의 설치 방법을 설명한다.
ValidationText InputLayout에서 사용자 정의 속성을 추가하여 xml에 필요한 알림 항목, 오류 정보를 지정할 수 있습니다.
작업 예
목표 형식
다음은 전자 우편 주소의 입력 표시줄이어야 하며, 입력 내용이 전자 우편 형식인지 확인해야 한다.
만약 전자 우편 내용이 아니라면, errortext로 지정한 문자열을 표시합니다.
<ValidationTextInputLayout
app:required="true"
app:validation_type="email"
app:error_text="Email value is invalidated"
>
<EditText
android:hint="Email (Required)"
/>
</ValidationTextInputLayout>
구조
사용자 정의 속성 정의
res/values/attrs.xml에서 사용자 정의 속성을 정의합니다.
나중에 정의된 ValidationText InputLayout에서 속성 변경 동작을 적용합니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ValidationTextInputLayout">
<attr name="required" format="boolean" />
<attr name="validation_type">
<enum name="post_code" value="0" />
<enum name="email" value="1" />
</attr>
<attr name="error_text" format="string" />
</declare-styleable>
</resources>
유효성 검사 유형 정의
ValidationType을 열거 유형으로 정의합니다.
이 처리는 필수적이지는 않지만 원본 코드의 전망을 높일 수 있다.
um값과attrs를 만듭니다.xml에 정의된 값은 일치해야 합니다.
public enum ValidationType {
PostCode(0), Email(1),
Null(9999);
private int value;
ValidationType(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
public static ValidationType valueOf(final int value) {
ValidationType type = Null;
for (ValidationType validationType : ValidationType.values()) {
if (validationType.getValue() == value) {
type = validationType;
break;
}
}
return type;
}
}
Text InputLayout의 확장
initAttrs()에서 지정한 속성 값을 가져옵니다.
업데이트Error()에서 필요한 경우 오류 정보를 출력하는지 확인합니다.
isValidated()를 외부에서 호출하면 검증이 통과되었는지 여부를 판단할 수 있습니다.
public class ValidationTextInputLayout extends TextInputLayout {
private static final String PATTERN_POST_CODE = "\\d{7}";
private boolean isRequired = false;
private ValidationType validationType = ValidationType.Null;
private String errorText;
public ValidationTextInputLayout(Context context) {
super(context);
}
public ValidationTextInputLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initAttrs(context, attrs);
}
public ValidationTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initAttrs(context, attrs);
}
private void initAttrs(final Context context, AttributeSet attrs) {
final TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ValidationTextInputLayout);
isRequired = typedArray.getBoolean(R.styleable.ValidationTextInputLayout_required, false);
final int validationTypeValue = typedArray.getInt(
R.styleable.ValidationTextInputLayout_validation_type, ValidationType.Null.getValue());
validationType = ValidationType.valueOf(validationTypeValue);
String errorText = typedArray.getString(R.styleable.ValidationTextInputLayout_error_text);
if (TextUtils.isEmpty(errorText)) {
errorText = getContext().getString(R.string.error_default_text);
}
this.errorText = errorText;
}
public boolean isValidated() {
updateError();
final boolean isValidated = TextUtils.isEmpty(getError());
setErrorEnabled(!isValidated);
return isValidated;
}
private void updateError() {
final String text = getEditText().getText().toString();
final boolean isEmpty = TextUtils.isEmpty(text);
setError(null);
switch (validationType) {
case PostCode:
if (!isPostCode(text)) {
setError(errorText);
}
break;
case Email:
if (!isEmail(text)) {
setError(errorText);
}
break;
default:
break;
}
if (isEmpty) {
if (isRequired) {
setError("Fill in this form");
} else {
setError(null);
}
}
}
private boolean isPostCode(final String str) {
return Pattern.compile(PATTERN_POST_CODE).matcher(str).matches();
}
private boolean isEmail(final String str) {
return Patterns.EMAIL_ADDRESS.matcher(str).matches();
}
}
견본
Validation-Text-Input-Layout@github에 실행할 항목이 있습니다.
iOS 버전
iOS에서도 동일하게 처리됩니다.
보세요Text-Input-Layout@github.
Reference
이 문제에 관하여(인증 기능이 있는 TextInputLayout 설치 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ayakix/items/adc77dae3441c0835d5c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)