Post curto do dia. Estava querendo customizar o erro do TextInputLayout (TIL) e só consegui graças a ajuda da Lisa Wray, que deu a ótima sugestão de utilizar as classes SpannableStringBuilder + ImageSpan, que eu não conhecia.
Muitos devs Android, quando vêm algum método que recebe um objeto CharSequence como parâmetro, pensam imediatamente é o mesmo que passar uma String. Mas na verdade o CharSequence é bem mais poderoso, pois permite ir além de textos planos. A classe SpannableStringBuilder é uma subclasse de CharSequence que permite adicionar Spannable's como o ImageSpan.
Vejamos o código a seguir.
TextInputLayout textInputLayout = (TextInputLayout) editText.getParent();
if (campoInvalido()) { // sua verificação do campo vem aqui.
// Cria a imagem que será incluída no texto do erro.
// O alinhamento poderia ser ALIGN_BASELINE
ImageSpan imageSpan = new ImageSpan(
this, R.drawable.ic_erro, DynamicDrawableSpan.ALIGN_BOTTOM);
// O SpannableStringBuilder substituirá o primeiro caracter pela imagem
// por isso o " " no começo.
SpannableStringBuilder ssbErrorMessage =
new SpannableStringBuilder(" "+ getString(R.string.msg_erro));
// Adicionando a imagem como texto do erro
ssbErrorMessage.setSpan(imageSpan, 0, 1, 0);
// Habilita o erro do TIL
textInputLayout.setErrorEnabled(true);
// define a mensagem de erro
textInputLayout.setError(ssbErrorMessage);
// Atualiza o componente
textInputLayout.refreshDrawableState();
}
O resultado ficará como a imagem abaixo.Dois detalhes importantes nesse exemplo:
1) essa abordagem pode ser utilizada por qualquer componentes que receba um CharSequence \o/
2) Podemos utilizar qualquer Bitmap como imagem ;)
4br4ç05,
nglauber

Nenhum comentário:
Postar um comentário