从EditText设置setError不能显示提示文本说说Html的fromHtml用法

在安卓代码中有时对EditText进行判空操作的时候,一旦发现某个EditText为空时,会通过如下代码给用户一个提示:

etName.setError("请输入用户名");

但是有的时候会发现错误提示的图标和背景都能显示出来,但是背景上没有文字显示!其实并不是文字没有显示,而是文字以白色进行了显示,显示的时候字体色和背景色是一样的,所以无法看见提示文字。解决的办法就是把字体的颜色改一下。EditText本身并没有提供用来设置错误提示文字颜色的方法,但是setError方法接受的参数类型为CharSequence,这就意味着我们不单可以提供String类型作为setError方法的参数,还可以使用Spannable。

比较简单的获得一个Spannable类型对象的方式就是通过Html.fromHtml方法。fromHtml方法接收一个形如HTML文本的字符串,并且可以根据HTML自身标签的含义进行解析并生成Spannable型对象。比如,上面要修改字体颜色,就可以利用HTML中修改字体颜色的<font>标签来完成:

String html = "<font color=000000>请输入用户名</font>";
etName.setError(Html.fromHtml(html));

此时,错误提示信息文字就会以黑色呈现在白色的背景上了。

另外,Spannalbe的强大之处在于可以进行图文混排。利用fromHtml的三参数重载方法就可以实现一个图文混排的Spannable对象:

String html = "<font color=000000>请输入用户名</font><img src=ic_launcher></img>";
etUserName.setError(Html.fromHtml(html,new ImageGetter() {
				
				@Override
				public Drawable getDrawable(String source) {
					showLog(source);
					int resId = getResources().getIdentifier(source, "drawable", getPackageName());
					Drawable d = getResources().getDrawable(resId);
					d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
					return d ;
				}
			},null));

fromHtml的三参数重载方法中,第一个参数依然是HTML形式的文本内容。第二个参数是img标签解析器,解析器是Html.ImageGetter接口的实现类,其中getDrawable方法是接口中的抽象方法,fromHtml会将<img>表情中src属性的属性值作为方法参数传入,而getDrawable方法的返回值就是根据参数内容解析获得的图片。本例中,图片的名字是ic_launcher,利用资源管理器的getIdentifier方法可以反向解析出该资源名称对应的资源id,然后利用资源管理器的getDrawable方法将资源id传入即可获得该资源id对应的Drawable图片。获得图片后要显示的指定一下该Drawable图像的大小。然后将该Drawable对象返回。至于fromHtml方法的第三个参数是用来解析其他HTML标签用的。该参数的具体用法可以参考这篇文章:http://www.cnblogs.com/macroxu-1982/archive/2011/11/12/2246283.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值