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


151

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

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

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

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

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

최소 SDK는 1

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

감사합니다


1
당신은 단지 그것을 할 수 없을 것입니다 EditText. 아마도 랩핑 EditText하거나 추가 할 무언가가 필요할 것입니다 . github.com/rengwuxian/MaterialEditText를 참조하십시오 .
CommonsWare

답변:


330

구글이 도입 된 이후 타사 라이브러리를 사용할 필요가 없습니다 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();

3
예 ! 그게 다야! 그래도 어떻게 선을 빨간색으로 만드나요?
kmn

3
@kmn 라인을 빨간색으로 만들면 상자에서 나오지 않으므로 스스로해야합니다. 내 편집을 참조하십시오. 힌트 이동 측면에서 : 그것은 불가능합니다.
reVerse

5
@Alessio 나는 AppCompatActivity를 확장 할 때 작동해야한다고 말하려고했습니다. 그럼에도 불구하고 : appcompat-v23부터는 textInputLayout.setError("Error messsage")색상을 호출 하는 즉시 색상 필터를 더 이상 설정할 필요가 없습니다 EditText. 재설정하기 위해서는 호출하기에 충분합니다 textInputLayout.setError(null).
reVerse

3
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);최신 지원 라이브러리에 더 이상 필요하지 않습니다
앙투안 Bolvy에게

13
아주 작은 세부 사항이므로 참고하고 싶었 EditText습니다 TextInputLayout. 나는이 답변을 보았지만 여전히 내가 변경해야 할 것을 알 수 없었습니다. 놓치기 쉬운 것.
h_k

8

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

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


7

당신 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'

4

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);


0

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

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


0
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();
            } 
}
}

이전 질문에 대답 할 때 답변이 어떻게 도움이되는지를 설명하는 컨텍스트를 포함하면 특히 Stackableflow 사용자에게 더 유용 할 것입니다. 좋은 답변을 작성하는 방법을 참조하십시오 .
David Buck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.