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
됩니다 .TextInputLayout
EditText
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.
'IT story' 카테고리의 다른 글
컨트롤러의 액션에서 XML을 ActionResult로 반환 하시겠습니까? (0) | 2020.06.25 |
---|---|
MySQL에서 필드가 null이면 0을 반환 (0) | 2020.06.25 |
Windows에서 하나의 명령으로 폴더의 모든 파일 확장자 변경 (0) | 2020.06.25 |
Doctrine에서 findBy ()로 결과를 주문하는 방법 (0) | 2020.06.25 |
ID를 사용하여 여러 SQL 테이블을 조인하는 방법은 무엇입니까? (0) | 2020.06.25 |