Respostas:
Não há necessidade de usar uma biblioteca de terceiros, uma vez que o Google introduziu o TextInputLayout
como parte do design-support-library
.
Seguindo um exemplo básico:
<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>
Nota: Ao definir app:errorEnabled="true"
como um atributo, TextInputLayout
ele não mudará de tamanho quando um erro for exibido - portanto, basicamente bloqueia o espaço.
Para mostrar o erro abaixo, EditText
basta ligar #setError
para o TextInputLayout
(NÃO no filho EditText
):
TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout);
til.setError("You need to enter a name");
Para ocultar o erro e redefinir a tonalidade, basta ligar til.setError(null)
.
Para usar o arquivo, TextInputLayout
você deve adicionar o seguinte às suas build.gradle
dependências:
dependencies {
compile 'com.android.support:design:25.1.0'
}
Por padrão, a linha do EditText
será vermelha. Se você precisar exibir uma cor diferente, poderá usar o código a seguir assim que ligar setError
.
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
Para limpá-lo, basta chamar a clearColorFilter
função, assim:
editText.getBackground().clearColorFilter();
textInputLayout.setError("Error messsage")
a cor do EditText
vermelho. Para redefini-lo, basta ligar textInputLayout.setError(null)
.
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
não é mais necessário com a mais recente biblioteca de suporte
EditText
, não no TextInputLayout
. Vi essa resposta e ainda não conseguia descobrir o que precisava mudar. Coisa muito fácil de perder.
Seu EditText
deve ser embrulhado em umTextInputLayout
<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>
Para receber uma mensagem de erro como você deseja, defina o erro como TextInputLayout
TextInputLayout tilEmail = (TextInputLayout) findViewById(R.id.tilEmail);
if (error){
tilEmail.setError("Invalid email id");
}
Você deve adicionar a dependência da biblioteca de suporte ao design. Adicione esta linha em suas dependências gradle
compile 'com.android.support:design:22.2.0'
A resposta do reVerse é ótima, mas não apontou como remover o tipo de dica de ferramenta de erro flutuante
Você precisará edittext.setError(null)
remover isso.
Além disso, como alguém apontou, você não precisaTextInputLayout.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>
Código
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
. Provavelmente, você precisará de algo que envolvaEditText
ou acrescente a ele. Consulte github.com/rengwuxian/MaterialEditText .