Відповіді:
Немає необхідності користуватися сторонніми бібліотеками, оскільки 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");
}
Вам слід додати залежність бібліотеки підтримки дизайну. Додайте цей рядок у залежності від градусів
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 .