IT story

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

hot-time 2020. 6. 25. 07:53
반응형

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

결과

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

To hide the error and reset the tint simply call til.setError(null).


Note

In order to use the TextInputLayout you have to add the following to your build.gradle dependencies:

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

Setting a custom color

By default the line of the EditText will be red. If you need to display a different color you can use the following code as soon as you call setError.

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

To clear it simply call the clearColorFilter function, like this:

editText.getBackground().clearColorFilter();

Your EditText should be wrapped in a 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>

To get an error message like you wanted, set error to TextInputLayout

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

You should add design support library dependency. Add this line in your gradle dependencies

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

Call myTextInputLayout.setError() instead of myEditText.setError().

These container and containment have double functionality on setting errors. Functionality you need is container's one. But you could require minimal version of 23 for that.


reVerse's answer is great but it didn't point out how to remove the floating error tooltip kind of thing

You'll need edittext.setError(null) to remove that.
Also, as someone pointed out, you don't need TextInputLayout.setErrorEnabled(true)

Layout

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

Code

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

If anybody still facing the error with using google's design library as mentioned in the answer then, please use this as commented by @h_k which is -

Instead of calling setError on TextInputLayout, You might be using setError on EditText itself.

참고URL : https://stackoverflow.com/questions/30953449/design-android-edittext-to-show-error-message-as-described-by-google

반응형