Flutter基础控件--Text/RichText

  从本篇开始,将对Flutter的基础控件进行讲解。
  Flutter中的Text相当于Android中的TextView,属于最常用的Widget之一了。
  Text构造函数如下


  const Text(this.data, {
    Key key, // 选填参数,Key类型,Widget的标识,
    this.style, // 选填参数,TextStyle类型,文本样式
    this.strutStyle, // 选填参数,StrutStyle类型,设置每行的最小行高
    this.textAlign, // 选填参数,TextAlign类型,文本的对齐方式
    this.textDirection, // 选填参数,TextDirection类型,文字方向
    this.locale, // 选填参数,Local类型,用于选择用户语言和格式设置首选项的标识符
    this.softWrap, // 选填参数,bool类型,是否支持软换行符,如果是 false 的话,这个文本只有一行,水平方向是无限的
    this.overflow, // 选填参数,TextOverflow类型,文本的截断方式
    this.textScaleFactor, // 选填参数,double类型,代表文本相对于当前字体大小的缩放因子,默认值为1.0
    this.maxLines, // 选填参数,int类型,显示的最大行数
    this.semanticsLabel, // 选填参数,String类型,给文本加上一个语义标签(用不到)
  }) : assert(data != null),
       textSpan = null,
       super(key: key);
    
    ...
}

  常用属性如下:

属性 说明
textAlign 文本位置(TextAlign.left,TextAlign.right,TextAlign.center)
overflow 超出文本显示样式(TextOverflow.ellipsis,TextOverflow.clip,TextOverflow.fade)
maxLines 最大行数
softWrap 是否换行
style TextStyle文本样式

TextStyle构造函数如下:


class TextStyle extends Diagnosticable {

  const TextStyle({
    this.inherit = true, // 可选,类型 bool,是否继承父 Text 的样式,默认为 true,如果为 false,且样式没有设置具体的值,则采用默认值:白色、大小 10px、sans-serif 字体
    this.color, // 可选,类型 Color,文字的颜色
    this.fontSize, // 可选,类型 Color,文字的大小
    this.fontWeight, // 可选,类型 FontWeight,字体粗细
    this.fontStyle, // 可选,类型 FontStyle,是否在字体中倾斜字形
    this.letterSpacing, // 可选,类型 double,字母之间的间隔
    this.wordSpacing, // 可选,类型 double,字母之间的间隔
    this.textBaseline, // 可选,类型 TextBaseLine,用于对齐文本的水平线
    this.height, // 可选,类型 double,文本的高度,但它并不是一个绝对值,而是一个因子,具体的行高等于 fontSize * height
    this.locale, // 可选,类型 Locale,用于选择用户语言和格式设置首选项的标识符
    this.foreground, // 可选,类型 Paint,文本的前景色
    this.background, // 可选,类型 Paint,文本的背景色
    this.shadows, // 可选,类型 List,在文本下方绘制阴影
    this.decoration, // 可选,类型 TextDecoration,文本的线条
    this.decorationColor, // 可选,类型 Color,TextDecoration 线条的颜色
    this.decorationStyle, // 可选,类型 TextDecorationStyle,TextDecoration 线条的样式
    this.debugLabel, // 可选,类型 String,文本样式的描述
    String fontFamily, // 可选,类型 String,用于设置使用那种自定义字体
    List fontFamilyFallback, // 可选,类型 String,字体列表,当前面的字体找不到时,会在这个列表里依次查找
    String package, // 可选,类型 String
  }) : fontFamily = package == null ? fontFamily : 'packages/$package/$fontFamily',
       _fontFamilyFallback = fontFamilyFallback,
       _package = package,
       assert(inherit != null),
       assert(color == null || foreground == null, _kColorForegroundWarning);
       
    ...
}

  常用属性如下:

属性 说明
color 文本颜色
fontSize 文本大小(默认14)
fontStyle 字体样式(FontStyle.italic 使用斜体,FontStyle.normal 使用直立)
textBaseline 对齐文本的水平线:
fontFamily 文本字体
letterSpacing 水平字母之间的空间间隔(逻辑像素为单位)。可以使用负值来让字母更接近
wordSpacing 单词之间添加的空间间隔(逻辑像素为单位)。可以使用负值来使单词更接近。
height 文本行与行的高度,作为字体大小的倍数(取值1~2,如1.2)
background 文本背景色
foreground 文本的前景色,不能与color共同设置
fontWeight 绘制文本时使用的字体粗细:FontWeight.bold 常用的字体重量比正常重。FontWeight.normal 默认字体粗细
decorationStyle 绘制文本装饰的样式(画一条虚线 TextDecorationStyle.dashed,画两条线 TextDecorationStyle.double,画一条实线 TextDecorationStyle.solid,画一条实线 TextDecorationStyle.solid)
shadows 背景设定(边框、圆角、阴影、形状、渐变、背景图像等)详见Decoration用法

  RichText
RichText富文本就是使文本呈现各式各样的样式,在Android中通过SpannableString/SpannableStringBuilder来实现富文本
RichText构造函数

  RichText({
    Key key,
    @required this.text,
    this.textAlign = TextAlign.start,
    this.textDirection,
    this.softWrap = true,
    this.overflow = TextOverflow.clip,
    this.textScaleFactor = 1.0,
    this.maxLines,
    this.locale,
    this.strutStyle,
  }) : assert(text != null),
       assert(textAlign != null),
       assert(softWrap != null),
       assert(overflow != null),
       assert(textScaleFactor != null),
       assert(maxLines == null || maxLines > 0),
       super(key: key);

其常用属性和Text差不多
常用属性

属性 说明
textAligen 文本位置
textDirection 文本方向
softWrap 自动换行
overflow 文本超出部分显示样式
maxLines 最大行数

与Text不同,RichText的text属性不是String类型,而是TextSpan,这个TextSpan有点像Android富文本里面的ClickableSpan、ForegroundColorSpan等,TextSpan构造函数如下:

TextSpan({
    this.style,
    this.text,
    this.children,
    this.recognizer,
    this.semanticsLabel,
  })

常用属性

属性 说明
text 文本内容
style TextStyle,文本风格
children TextPan列表,实现多个富文本
recognizer 文本片段的手势交互,如点击、长按事件

完整代码

    children: [
            Text(
              'You have pushed the button this many times:You have pushed the button this many times:You have pushed the button this many times:',
              textAlign: TextAlign.left,
              style: TextStyle(color: Color(0xffffc811), fontSize: 20),
            ),
            RichText(
              text: TextSpan(
                  text: 'RichText',
                  style: TextStyle(
                      color: Color(0xffffc811), fontStyle: FontStyle.normal),
                  children: [
                    TextSpan(
                        text: 'hello',
                        style: TextStyle(
                            color: Color(0xfff03f59),
                            fontStyle: FontStyle.italic),
                        recognizer: TapGestureRecognizer()
                          ..onTap = () {
                            print("click");
                          }),
                    TextSpan(
                        text: 'world',
                        style: TextStyle(
                            color: Color(0xffffc811),
                            fontStyle: FontStyle.italic))
                  ]),
            ),

Text有一个静态方法rich,可以达到RichText的效果。其实,看一下Text的build方法可以知道,Text实际上是对RichText的包装。

  @override
  Widget build(BuildContext context) {
    ...
    Widget result = RichText(
      ...
      text: TextSpan(
        ...
        text: data,
        children: textSpan != null ? [textSpan] : null,
      ),
    );
    ...
    return result;
  }

你可能感兴趣的:(Flutter基础控件--Text/RichText)