Jak napisać styl do tekstu błędu EditText w Androidzie?

Próbuję napisać nowy niestandardowy styl dla mojej aplikacji na Androida. Muszę nadać styl errortextowi, który pojawia się po ustawieniu setError W EditText.

Jak mogę dostosować jego styl?

Na przykład: chcę ustawić jego background biały i textColor: niebieski itd itd. w dobrym stylu.xml

Tutaj wpisz opis obrazka

Author: ibrahimyilmaz, 2013-01-19

6 answers

Rozwiązanie jest na końcu, a oto zrzut ekranu:

Błąd w stylu


Niektóre Wyjaśnienia

Ty Może można ustawić textcolor używając następującej linii

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

Jednak może to nie być zagwarantowane.


Zgodnie z kodem źródłowym, Ten Popup, który pokazuje jest typu ErrorPopup, który jest klasą wewnętrzną wewnątrz TextView. Zawartość tego {[3] } jest pojedynczym TextView napompowanym z com.android.internal.R.layout.textview_hint

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

Tło tego Popup zależy od tego, czy powinno być umieszczone nad kotwicą:

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

Ponieważ wszystkie zasoby Androida użyte do utworzenia wyskakującego okienka są wewnętrzne i ostatecznie zakodowane na twardo, najlepiej byłoby utworzyć własne wyskakujące okienko błędu. Byłoby to bardzo proste i nie przeszkadzałoby to w normalnym EditText, ponieważ domyślne wyskakujące okienko służy jedynie do pokazania błędu, a zatem tworzenie własnego byłoby dobrze.


Rozwiązanie

Stworzyłem go tutaj: Widgiwidgets

 32
Author: Sherif elKhatib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-07 13:28:03

Myślę, że nie możesz dostosować stylu w ten sposób, ponieważ wyskakujące okienko błędu używa wewnętrznego stylu :

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

Można jednak ustawić Spanned oraz niestandardową ikonę błędu przy użyciu przeciążonego setError(CharSequence, Drawable).

Możesz łatwo utworzyć Spanned z HTML za pomocą fromHtml().

Jednak nadal nie będzie można ustawić wyskakującego obrazu tła: - (

 13
Author: Dheeraj V.S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-05 13:47:13

Proszę dodać go w momencie walidacji formularza, jeśli pole edycji tekstu jest puste.

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

Gdy piszesz w edycji tekstu, znak błędu automatycznie wyłącza się

Dzięki Sachin

 10
Author: Sachin Arora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-19 06:20:44

Widziałem akceptowaną odpowiedź, ale nie podoba mi się proponowana biblioteka

Myślę, że to jest błąd w Android framework i złożyłem błąd tutaj: https://code.google.com/p/android/issues/detail?id=158590

Edytuj: android design library TextInputLayout widget może być używany do uzyskania lepszej obsługi błędów na EditText.

Zobacz jak to wygląda tutaj: https://www.youtube.com/watch?v=YnQHb0fNtF8

I jak wdrożyć proszę.: http://code.tutsplus.com/tutorials/creating-a-login-screen-using-textinputlayout--cms-24168

 4
Author: Daniele Segato,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-05 15:08:10

Kliknij ten link, aby mieć ładny wygląd materiału komunikat o błędzie! materialdoc zrzut ekranu

 2
Author: batsheva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-08 11:47:25

To działa dobrze!

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
Author: Emmanuel Guther,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-30 13:36:27