[android] Google에 설명 된대로 오류 메시지를 표시하도록 Android EditText를 디자인하십시오.

EditText다음과 같은 모양이 필요합니다 .

여기에 이미지 설명을 입력하십시오

onError를 호출하면 다음과 같이 보입니다.

여기에 이미지 설명을 입력하십시오

참고 : 앱이 SDK 19 (4.4.2)에서 실행되고 있습니다.

최소 SDK는 1

이것을 자동으로 수행하는 setError와 비슷한 방법이 있습니까, 아니면 코드를 작성해야합니까?

감사합니다



답변

구글이 도입 된 이후 타사 라이브러리를 사용할 필요가 없습니다 TextInputLayout의 등 부분은 design-support-library.

기본 예를 따르면 :

나열한 것

<android.support.design.widget.TextInputLayout
    android:id="@+id/text_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:errorEnabled="true">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter your name" />

</android.support.design.widget.TextInputLayout>

참고 :app:errorEnabled="true" 속성으로 설정 TextInputLayout하면 오류가 표시되면 크기가 변경되지 않으므로 기본적으로 공간을 차단합니다.

암호

아래에 오류를 표시 EditText하려면 간단히 (자식 없음 ) 을 호출하면 #setError됩니다 .TextInputLayoutEditText

TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout);
til.setError("You need to enter a name");

결과

오류 메시지와 함께 편집 텍스트를 보여주는 그림

오류를 숨기고 색조를 재설정하려면을 호출하면 til.setError(null)됩니다.


노트

를 사용하려면 종속성에 TextInputLayout다음을 추가해야합니다 build.gradle.

dependencies {
    compile 'com.android.support:design:25.1.0'
}

사용자 정의 색상 설정

기본적으로의 줄은 EditText빨간색입니다. 다른 색상을 표시해야하는 경우 전화를 걸 자마자 다음 코드를 사용할 수 있습니다 setError.

editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);

지우려면 간단히 clearColorFilter다음과 같이 함수 를 호출하십시오 .

editText.getBackground().clearColorFilter();


답변

myTextInputLayout.setError()대신에 전화하십시오 myEditText.setError().

이 컨테이너와 격리는 설정 오류에 대해 두 가지 기능이 있습니다. 필요한 기능은 컨테이너의 기능입니다. 그러나 최소 버전 23이 필요할 수 있습니다.


답변

당신 EditText은에 싸여 있어야합니다TextInputLayout

<android.support.design.widget.TextInputLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tilEmail">

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        android:id="@+id/etEmail"
        android:hint="Email"
        android:layout_marginTop="10dp"
        />

</android.support.design.widget.TextInputLayout>

원하는 오류 메시지를 얻으려면 error를 TextInputLayout

TextInputLayout tilEmail = (TextInputLayout) findViewById(R.id.tilEmail);
if (error){
    tilEmail.setError("Invalid email id");
}

설계 지원 라이브러리 종속성을 추가해야합니다. gradle 의존성 에이 줄을 추가하십시오

compile 'com.android.support:design:22.2.0'


답변

reVerse의 대답은 훌륭하지만 부동 오류 툴팁 종류를 제거하는 방법을 지적하지 않았습니다.

당신은 그것을 edittext.setError(null)제거 해야 합니다.
또한 누군가 지적했듯이 필요하지 않습니다.TextInputLayout.setErrorEnabled(true)

나열한 것

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter something" />
</android.support.design.widget.TextInputLayout>

암호

TextInputLayout til = (TextInputLayout) editText.getParent();
til.setError("Your input is not valid...");
editText.setError(null);


답변

TextInputLayout til = (TextInputLayout)editText.getParent();
til.setErrorEnabled(true);
til.setError("some error..");


답변

답변에 언급 된대로 Google의 디자인 라이브러리를 사용하는 동안 여전히 오류가 발생하면 @h_k의 주석에 따라 사용하십시오-

TextInputLayout 에서 setError를 호출하는 대신 EditText 자체에서 setError를 사용하고있을 수 있습니다 .


답변

private EditText edt_firstName;
private String firstName;

edt_firstName = findViewById(R.id.edt_firstName);

private void validateData() {
 firstName = edt_firstName.getText().toString().trim();
 if (!firstName.isEmpty(){
//here api call for ....
}else{
if (firstName.isEmpty()) {
                edt_firstName.setError("Please Enter First Name");
                edt_firstName.requestFocus();
            }
}
}