¿Cómo mostrar errores de entrada en popup?

Quiero mostrar todos los errores de validación de los campos EdiText en una ventana emergente como se muestra en la imagen de abajo:

Alerta de error en popup

Por lo que sé Android tiene drawables:

1) popup_inline_error.9.png

Popup_inline_error.9.png

2) popup_inline_error_above.9.png

Popup_inline_error_above.9

3) indicator_input_error.png

Indicator_input_error.png

Puedo exhibir el indicador rojo del error dentro del lado derecho del EditText usando:

 Drawable err_indiactor = getResources().getDrawable(R.drawable.indicator_input_error); mEdiText.setCompoundDrawablesWithIntrinsicBounds(null, null, err_indiactor, null); 

Ahora también quiero mostrar el mensaje de error como se muestra es la primera imagen, pero parece que no estoy recibiendo ninguna idea acerca de esto, aunque creo que debería ser una tostada personalizada.

prueba esto..

 final EditText editText=(EditText) findViewById(R.id.edit); editText.setImeActionLabel("",EditorInfo.IME_ACTION_NEXT); editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId==EditorInfo.IME_ACTION_NEXT){ if( editText.getText().toString().trim().equalsIgnoreCase("")) editText.setError("Please enter some thing!!!"); else Toast.makeText(getApplicationContext(),"Notnull",Toast.LENGTH_SHORT).show(); } return false; } }); 

Como la respuesta anterior es la solución para mi problema, pero he intentado un enfoque diferente para utilizar una imagen personalizada Drawable en lugar de predeterminado indicator_input_error imagen.

Predeterminado Drawable

Predeterminado Drawable

Personalizada a medida

Personalizada a medida

Por lo tanto, acabo de crear dos EditText en mi archivo xml de diseño y, a continuación, implementado algunos Listener en código Java en que EditText .

Main.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="20dip" android:background="#222222"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Username" android:id="@+id/etUsername" android:singleLine="true" android:imeActionLabel="Next"></EditText> <EditText android:layout_width="match_parent" android:inputType="textPassword" android:layout_height="wrap_content" android:hint="Password" android:id="@+id/etPassword" android:singleLine="true" android:imeActionLabel="Next"></EditText> </LinearLayout> 

EditTextValidator.java

 import java.util.regex.Pattern; import android.app.Activity; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.inputmethod.EditorInfo; import android.widget.EditText; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; public class EditTextValidator extends Activity { private EditText mUsername, mPassword; private Drawable error_indicator; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Setting custom drawable instead of red error indicator, error_indicator = getResources().getDrawable(R.drawable.emo_im_yelling); int left = 0; int top = 0; int right = error_indicator.getIntrinsicHeight(); int bottom = error_indicator.getIntrinsicWidth(); error_indicator.setBounds(new Rect(left, top, right, bottom)); mUsername = (EditText) findViewById(R.id.etUsername); mPassword = (EditText) findViewById(R.id.etPassword); // Called when user type in EditText mUsername.addTextChangedListener(new InputValidator(mUsername)); mPassword.addTextChangedListener(new InputValidator(mPassword)); // Called when an action is performed on the EditText mUsername.setOnEditorActionListener(new EmptyTextListener(mUsername)); mPassword.setOnEditorActionListener(new EmptyTextListener(mPassword)); } private class InputValidator implements TextWatcher { private EditText et; private InputValidator(EditText editText) { this.et = editText; } @Override public void afterTextChanged(Editable s) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() != 0) { switch (et.getId()) { case R.id.etUsername: { if (!Pattern.matches("^[az]{1,16}$", s)) { et.setError("Oops! Username must have only az"); } } break; case R.id.etPassword: { if (!Pattern.matches("^[a-zA-Z]{1,16}$", s)) { et.setError("Oops! Password must have only az and AZ"); } } break; } } } } private class EmptyTextListener implements OnEditorActionListener { private EditText et; public EmptyTextListener(EditText editText) { this.et = editText; } @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_NEXT) { // Called when user press Next button on the soft keyboard if (et.getText().toString().equals("")) et.setError("Oops! empty.", error_indicator); } return false; } } } 

Ahora lo he probado como:

Para validaciones de EditText vacías:

Supongamos que el usuario haga clic en el campo Username luego Softkeybord se abre y si el usuario presiona la tecla Next , el usuario se centrará en el campo Password y el campo Username permanece vacío, entonces el error se mostrará como se muestra en las imágenes siguientes:

Texto vacíoTexto vacío

Para validaciones de entradas incorrectas:

1) vikaS el vikaS del texto en campo del username entonces el error será como como dado en imagen abajo:

Nombre de usuario incorrecto

2) Escribo el Password1 del texto en campo de la contraseña entonces el error será como como dado en imagen abajo:

contraseña incorrecta

Nota:

Aquí he utilizado la costumbre drawable sólo en caso de cuando el usuario dejó el campo EditText en blanco y presione la tecla Next en el teclado, pero se puede utilizar en cualquier caso. Sólo tiene que suministrar objeto setError() en el método setError() .

Sé que la respuesta ha sido aceptada por el solicitante, pero ninguna de las anteriores funcionó para mí.

He podido reproducir esto en mi Nexus S con Android 4.0.3.

He aquí cómo lo hice funcionar.

  1. Cree un tema con:

     <style name="MyApp.Theme.Light.NoTitleBar" parent="@android:style/Theme.Light.NoTitleBar"> <item name="android:textColorPrimaryInverse">@android:color/primary_text_light </item> </style> 
  2. Aplicar el tema MyApp.Theme.Light.NoTitleBar a mi aplicación / actividad de manifiesto.

      <application android:name=".MyApp" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/MyApp.Theme.Light.NoTitleBar" > 
  • ¿Cómo verificar la tarjeta PAN?
  • Validar "desde fecha" y "hasta la fecha" en android
  • Android MVP dudas sobre la validación
  • ¿Cómo validar una cadena usando java regex?
  • Centrarse en segundo edittext sólo si primero es no-vacío android
  • Cómo restringir el tiempo de entrada para edittext en android
  • Permitir sólo charcters seleccionados basados ​​en regex en un EditText
  • RxJava- validación de formulario RxAndroid en dynamic EditText
  • Android webView: Es posible configurar el teclado numérico primero por defecto cuando se usa input type = text
  • Cómo restringir el EditText para aceptar sólo caracteres alfanuméricos
  • ¿Cómo validar los valores de TextInput en reaccionar nativo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.