[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
됩니다 .TextInputLayout
EditText
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();
}
}
}