style - ¿Cómo escribir el estilo al texto de error de EditText en Android?
validar edittext en android studio (6)
Estoy intentando escribir un nuevo estilo personalizado para mi aplicación de Android. Necesito dar estilo a errorText que aparece después de establecer setError
en EditText
.
¿Cómo puedo personalizar el estilo?
Por ejemplo: quiero establecer su background
blanco y textColor
: azul, etc. en style.xml
¡Siga este enlace para tener una bonita apariencia de diseño de materiales con un mensaje de error! materialdoc
Esto funciona bien!
private fun setErrorOnSearchView(searchView: SearchView, errorMessage:
String) {
val id = searchView.context
.resources
.getIdentifier("android:id/search_src_text", null, null)
val editText = searchView.find<EditText>(id)
val errorColor = ContextCompat.getColor(this,R.color.red)
val fgcspan = ForegroundColorSpan(errorColor)
val builder = SpannableStringBuilder(errorMessage)
builder.setSpan(fgcspan, 0, errorMessage.length, 0)
editText.error = builder
}
He visto la respuesta aceptada pero no me gusta la biblioteca propuesta
Creo que esto es un error en el marco de Android y he archivado un error aquí: https://code.google.com/p/android/issues/detail?id=158590
EDIT: el widget de la biblioteca de diseño android TextInputLayout se puede utilizar para obtener un mejor manejo de errores en EditText.
Vea cómo se ve aquí: https://www.youtube.com/watch?v=YnQHb0fNtF8
Y cómo implementarlo aquí: http://code.tutsplus.com/tutorials/creating-a-login-screen-using-textinputlayout--cms-24168
La solución está al final y aquí está la captura de pantalla:
Algunas explicaciones
Es posible que pueda configurar el color de texto usando la siguiente línea
yourEditText.setError(Html.fromHtml("<font color=''blue''>this is the error</font>"));
Sin embargo, esto podría no estar garantizado.
De acuerdo con el código fuente, este Popup
que se muestra es de tipo ErrorPopup
que es una clase interna dentro de TextView
. El contenido de este Popup
es un solo TextView
inflado de com.android.internal.R.layout.textview_hint
final TextView err = (TextView) inflater.inflate(com.android.internal.R.layout.textview_hint,
null);
El fondo de esta Popup
depende de si debe colocarse sobre el anclaje:
if (above) {
mView.setBackgroundResource(com.android.internal.R.drawable.popup_inline_error_above);
} else {
mView.setBackgroundResource(com.android.internal.R.drawable.popup_inline_error);
}
Dado que todos los recursos de Android utilizados para crear la ventana emergente son internos y, en última instancia, están codificados, la mejor opción sería crear su propia ventana emergente de error. Esto sería muy fácil y no EditText
realmente interfiriendo con el EditText
normal porque el popup predeterminado se usa meramente para mostrar el error y, por lo tanto, crear el tuyo estaría bien.
SOLUCIÓN
Lo he creado aquí: WidgyWidgets
No creo que pueda personalizar su estilo de esa manera, ya que la ventana emergente de error usa un estilo interno :
mPopupInlineErrorBackgroundId = getResourceId(mPopupInlineErrorBackgroundId,
com.android.internal.R.styleable.Theme_errorMessageBackground);
mView.setBackgroundResource(mPopupInlineErrorBackgroundId);
Sin embargo, puede establecer un ícono de error Spanned
y personalizado utilizando el setError(CharSequence, Drawable)
sobrecargado setError(CharSequence, Drawable)
.
Puede crear fácilmente un Spanned
desde HTML usando fromHtml()
.
Sin embargo, aún no podrá configurar la imagen de fondo emergente :-(
Por favor, agréguela en el momento de la validación del formulario si el campo de edición de texto está en blanco.
int ecolor = R.color.black; // whatever color you want
String estring = "Please enter a valid email address";
ForegroundColorSpan fgcspan = new ForegroundColorSpan(ecolor);
SpannableStringBuilder ssbuilder = new SpannableStringBuilder(estring);
ssbuilder.setSpan(fgcspan, 0, estring.length(), 0);
edtEmail.requestFocus();
edtEmail.setError(ssbuilder);
cuando escribe en editar texto, la señal de error se apaga automáticamente
Gracias Sachin