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
6 answers
Rozwiązanie jest na końcu, a oto zrzut ekranu:
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
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: - (
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
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
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
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
}
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