Ответы:
Нет необходимости использовать стороннюю библиотеку, так как Google представил 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();
textInputLayout.setError("Error messsage")
цвет EditText
должен стать красным. Для того чтобы его сбросить, достаточно позвонить textInputLayout.setError(null)
.
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
больше не нужна больше с последней библиотекой поддержки
EditText
, а не для TextInputLayout
. Я видел этот ответ и все еще не мог понять, что мне нужно изменить. Очень легко пропустить.
Вы 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>
Чтобы получить сообщение об ошибке, как вы хотели, установите ошибку в 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..");
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();
}
}
}
EditText
. Скорее всего, вам нужно что-то, что оборачиваетEditText
или иным образом добавляет к этому. См. Github.com/rengwuxian/MaterialEditText .