Android UI设计之使用HTML标签,实现在TextView中对部分文字进行加粗显示

转载请注明出处:http://blog.csdn.net/llew2011/article/details/34122229

搞软件开发的都知道项目中各种需求都有,而有时候各种奇葩的需求真是让人大跌眼镜,为了实现这些奇葩的需求我们往往苦逼的废寝忘食,我现在的项目中就有一个应该算得上奇葩的需求吧,需求是这样的:在一段文字中实现对部分文字加粗

这个看上去也不难并且有点小儿科,因为TextView中有个属性是android:textStyle,它其中一个值是bold,也就是说是对将要显示的文字进行加粗,于是我就在TextView控件中添加了此属性,代码如下:

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dip"
        android:gravity="center"
        android:text="中文加粗了么?Chiness is bolded ?"
        android:textColor="#000000"
        android:textStyle="bold"
        android:textSize="18sp" />

运行程序测试了一下效果,很遗憾的是对英文和数字是可以加粗的,但是对中文就没有效果了。然后又想到到使用Android中自带的Html.fromHtml方法(我之前是搞J2EE开发的,对Web还是比较熟悉的,呵呵),因为在web开发中利用strong标签或者是b标签可以实现对文字的加粗效果,然后我就在TextView的setText()方法中使用Html.fromHtml方法,运行之后发现并没有出现加粗效果,又尝试了重新安装APK测试一下依然没有实现我想要的中文加粗效果,随后就上网询问百度。

在网上查看了其他的对中文加粗的实现,除了使用android:textStyle方法外就是通过TextView的TextPaint对象,调用TextPaint对象的setFakeBoldText(true),可以实现对文字加粗的效果,我就尝试了一下,代码如下:

title = (TextView) findViewById(R.id.title);
title.getPaint().setFakeBoldText(true);
这样就可以实现对中文和英文的同时加粗,实现了需求上说的对文字加粗的效果,但是问题来了,我需要实现的对文字加粗是在一段话中对部分文字而不是全部文字都需要加粗,这样问题就来了,虽然可以通过上述方法实现中文的加粗但是把所有的文字都加粗了,为了实现部分文字加粗,我幸苦的把需要加粗的文字使用单独的TextView实现,不需要加粗的就使用另外一个TextView,这样基本上实现了需求所要的效果。

虽然实现了效果,可是这个问题还是在我心里留着,后来在无意中看一个控件源码时发现了它的注释里有个加粗的效果使用的是<tt>标签,我立马来了兴趣就在心里想可能这个标签可以实现对文字的部分加粗,于是就赶紧测试一下,代码如下:

title = (TextView) findViewById(R.id.title);
title.setText(Html.fromHtml("<b>China中国<tt>中国</tt></b>China真伟大!"));
运行了一下程序,果然有效果,并且是实现的在一个TextView中对部分文字实现了加粗,呵呵,心里高兴坏了,于是赶紧记录下来,给今后有需要的童鞋留个方便吧

总结一下加粗方式:

对英文加粗
XML代码
android:textStyle="bold"

对中文加粗
Java代码
TextView textView = (TextView) findViewById(R.id.textview);
textView.getPaint().setFakeBoldText(true);

对部分文字加粗
Java代码
TextView textView = (TextView) findViewById(R.id.textview);
textView.setText(Html.fromHtml("不需要加粗的文字<b><tt>需要加粗的文字</tt></b>"));


详细代码请见:http://blog.csdn.net/llew2011/article/details/31403969



发布了39 篇原创文章 · 获赞 87 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/llew2011/article/details/34122229