Question Comment écrire du style sur le texte d'erreur de EditText dans Android?


J'essaie d'écrire un nouveau style personnalisé pour mon application Android. Je dois donner du style à errorText qui apparaît après le réglage setError dans EditText.

Comment puis-je personnaliser son style?

Par exemple: je veux définir son background blanc et textColor: Bleu etc etc dans style.xml

enter image description here


37
2018-01-19 10:52


origine


Réponses:


La solution est à la fin et voici la capture d'écran:

Styled error


Quelques explications

Toi pourrait être capable de définir la couleur du texte en utilisant la ligne suivante

yourEditText.setError(Html.fromHtml("<font color='blue'>this is the error</font>"));

Cependant, cela pourrait ne pas être garanti.


Selon le code source, cette Popup qui montre est de type ErrorPopup qui est une classe interne à l'intérieur TextView. Le contenu de cette Popup est un seul TextView gonflé de com.android.internal.R.layout.textview_hint

final TextView err = (TextView) inflater.inflate(com.android.internal.R.layout.textview_hint,
      null);

Le contexte de cette Popup dépend si elle doit être placée au-dessus de l'ancre:

if (above) {
    mView.setBackgroundResource(com.android.internal.R.drawable.popup_inline_error_above);
} else {
    mView.setBackgroundResource(com.android.internal.R.drawable.popup_inline_error);
}

Étant donné que toutes les ressources Android utilisées pour créer la fenêtre contextuelle sont internes et finalement codées en dur, la meilleure solution serait de créer votre propre popup d'erreur. Ce serait très facile et vous ne seriez pas vraiment interférer avec la normale EditText parce que la fenêtre contextuelle par défaut est simplement utilisée pour afficher l'erreur et, par conséquent, créer votre propre erreur serait bien.


SOLUTION

Je l'ai créé ici: WidgyWidgets


32
2018-03-07 13:28



Je ne pense pas que vous pouvez personnaliser son style de cette façon depuis la fenêtre contextuelle d'erreur utilise un style interne:

mPopupInlineErrorBackgroundId = getResourceId(mPopupInlineErrorBackgroundId,
                    com.android.internal.R.styleable.Theme_errorMessageBackground);
mView.setBackgroundResource(mPopupInlineErrorBackgroundId);

Cependant, vous pouvez définir un Spanned et une icône d'erreur personnalisée en utilisant la surcharge setError(CharSequence, Drawable).

Vous pouvez facilement créer un Spanned à partir de HTML en utilisant fromHtml().

Cependant, vous ne pourrez toujours pas définir l'image d'arrière-plan contextuelle :-(


13
2018-03-05 13:47



Veuillez l'ajouter au moment de la validation du formulaire si le champ de saisie est vide.

            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); 

lorsque vous écrivez dans le texte d'édition, le signe d'erreur automatique disparaît

Merci Sachin


9
2018-04-19 06:20



J'ai vu la réponse acceptée mais je n'aime pas la bibliothèque proposée

Je pense que c'est un bug dans le framework Android et j'ai déposé un bug ici: https://code.google.com/p/android/issues/detail?id=158590

MODIFIER: Le widget TextInputLayout de la bibliothèque de conception Android peut être utilisé pour obtenir une meilleure gestion des erreurs sur EditText.

Regardez à quoi ça ressemble ici: https://www.youtube.com/watch?v=YnQHb0fNtF8

Et comment mettre en œuvre ici: http://code.tutsplus.com/tutorials/creating-a-login-screen-using-textinputlayout--cms-24168


4
2018-03-06 10:05



suivez ce lien pour avoir une belle apparence matérielle de message d'erreur! materialdoc screenshot


1
2017-08-08 10:42



Cela fonctionne 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
}

0
2017-11-30 13:36