TextView 高级用法

TextView是Android中最常用的控件,其基本用法在Android开发基础/基础控件详解中讲解过了。

TextView不仅仅是显示几个字符这么简单,这里我们看一些很常用的高级的用法。

自定义字体样式

我们看到的成品app里面,TextView的文字样式都是经过仔细调整的,默认字体样式大小、颜色、字体可能都不合适。

调整TextView大小和颜色

我们可以在布局文件xml中,定义TextView的属性。

android:textSize="50sp"
android:textColor="#000000"

TextView控件有很多属性,字体大小和颜色是最常用的。

调整TextView的样式

加粗,斜体,和正常字体使用如下属性:

android:textStyle="bold"

可选值有bolditalicnormal

随意添加下划线很遗憾不能实现,但是TextView提供了autoLink属性,但是它只能实现为超链接,电话号码等自动添加下划线的效果。而且TextView能够渲染HTML,我们还可以使用HTML实现下划线的效果。

调整TextView字体

布局文件xml中,我们可以选用Android自带的Roboto几种字体。例子如下:

android:fontFamily="sans-serif"           // roboto regular
android:fontFamily="sans-serif-light"     // roboto light
android:fontFamily="sans-serif-condensed" // roboto condensed
android:fontFamily="sans-serif-black"     // roboto black
android:fontFamily="sans-serif-thin"      // roboto thin (android 4.2)
android:fontFamily="sans-serif-medium"    // roboto medium (android 5.0)

编程方法可以设置自定义字体:

TextView tv = (TextView) findViewById(R.id.appname);
Typeface face = Typeface.createFromAsset(getAssets(), "fonts/epimodem.ttf");
tv.setTypeface(face);

使用TextView显示HTML

编写聊天工具时,TextView应该在包含文本的同时,还包含图片,文本的字体,大小都能随意调节,这显然是需要TextView渲染富文本。TextView能够渲染HTML。

下面例子中,使用TextView渲染HTML。

TextView textView = (TextView) findViewById(R.id.tv_text);
Html.ImageGetter imageGetter = new Html.ImageGetter()
{

  public Drawable getDrawable(String source)
  {
    int resId = Integer.parseInt(source);
    Drawable drawable = getResources().getDrawable(resId);
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    return drawable;
  }
};
textView.setText(Html.fromHtml("<h1><font color=\"red\">hello</font></h1> <p> <img src=\"" + R.drawable.ic_launcher + "\" /><br />hellohellohellohellohello</p>", imageGetter, null));

这里主要注意ImageGetter的使用,我们重写了它的getDrawable()方法,因为HTML中我们定义了图片的src属性,我们需要用一种方式从资源或是网络中加载图片。这里我们使用的方式是通过资源ID进行加载,从网络加载也是同理的。

注意:drawable.setBounds()必须写上,否则图片默认大小为0,显示不出来。

运行效果:

注:后面背景是xml中加的。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。