【Flutter 2-1】Flutter手把手教程UI布局和Widget——文本和样式 Text Widget

作者 | 弗拉德
来源 | 弗拉德(公众号:fulade_me)

Text

我们先来看Text的构造函数都有哪些参数:

const Text( 
    this.data, { 
    //data 就是我们需要展示的文字 是字符串类型,这个是必传字段,其他的都是可选
    Key key,    
    //widget的标识
    this.style, 
    //文本样式,类型是TextStyle
    this.strutStyle, 
    //用来设置最小行高的参数
    this.textAlign, 
    //文本的对齐方式,类型是TextAlign
    this.textDirection, 
    // 文字方向,类型是TextDirection
    this.locale, 
    //选择用户语言和格式的标识符,类型是Locale,主要用于国际化
    this.softWrap, 
    //bool 类型 ,false标识文本只有一行,水平方向无限
    this.overflow, 
    //超出显示区域后的展示方式,类型是TextOverflow
    this.textScaleFactor,
    //double类型 表示文本相对于当前字体的缩放系数,默认为1.0
    this.maxLines,
    // int 类型,显示的最大行数
    this.semanticsLabel, 
    //String 类型,给文本加上一个语义标签
    this.textWidthBasis,
    //一行或多行文本宽度的不同方式,类型是TextWidthBasis
  }) 

Text我们重点介绍下面几个参数:datastyletextAlignmaxLinesoverflow
1. 最简单的示例

  Text("Fulade");

2. 放大和缩小

Text("文字放大1.5倍",textScaleFactor: 1.5);

textScaleFactor是缩放参数,默认是1.0,设置小于1的参数是缩小,设置大约1的参数是放大。
3. 居中、居左和居右

Text(
  "居右显示" * 10,
  textAlign: TextAlign.right,
);

textAlign是位置参数,常见的枚举值有TextAlign.rightTextAlign.leftTextAlign.center
4. 单行显示

Text(
  "最多一行显示超过部分显示..." * 10,
  maxLines: 1,
  overflow: TextOverflow.ellipsis,
);

maxLines表示文字需要几行来显示,如果超过了要显示的行数,文字会被切断。使用overflow来设置切断文字的样式,overflow有以下几个枚举值:

enum TextOverflow {
  clip,      //直接裁剪。
  fade,      // 渐变淡出
  ellipsis,  // 以省略号的方式
  visible,   // 依然显示,此时将会溢出父组件
}

如果我们不设置maxLines,文字默认会换行,以全部都展示的方式来显示。

以上四种样式效果如下:


2020_11_16_text

TextStyle

如果想要设置更复杂的文字样式,我们需要传入Textstyle参数,style参数接收一个 TextStyle的对象,TextStyle可以帮助我们做很多事情。

5. 粗体

Text(
  "粗体",
  style: TextStyle(fontWeight: FontWeight.bold),
)

fontWeight用来设置粗体。FontWeight.bold默认是w700
6. 颜色

Text(
  "红色",
  style: TextStyle(color: Colors.red),
)

color参数用来设置颜色。
7. 字号

Text(
  "字号20",
  style: TextStyle(fontSize: 20),
)

fontSize用来设置字号。
8. 斜体

Text(
  "斜体",
  style: TextStyle(fontStyle: FontStyle.italic),
)

fontStyle可以用来设置斜体,FontStyle.italic表示斜体,默认是FontStyle.normal

9. 背景颜色

Text(
  "背景颜色红色",
  style: TextStyle(
      background: Paint()..color = Colors.red,
      color: Colors.blue),
)

background用来设置背景颜色,它接收一个Paint对象作为参数,Paint对象可以设置color属性。
10. 删除线

Text(
  "删除线",
  style: TextStyle(
      decoration: TextDecoration.lineThrough,
      decorationColor: Colors.red),
)

decorationColor参数是设置删除线的颜色,TextDecoration.lineThrough是删除线的样式。
11. 下划线

Text(
  "下划线",
  style: TextStyle(
    decoration: TextDecoration.underline,
  ),
);

下划线的设置跟删除线的设置基本一样,只是枚举值不同,下划线使用的是TextDecoration.underline枚举。

以上几种样式展示效果如下:


2020_11_16_text_span

RichText 和 TextSpan

Flutter支持在一行文字里面显示不同颜色的文字,这里我们需要用到RichTextTextSpan

12. 多彩文字

RichText(
  text: TextSpan(
    textAlign: TextAlign.center,
    text: "多彩文字:",
    style: TextStyle(color: Colors.black),
    children: <TextSpan>[
      TextSpan(
          text: "红色、", style: TextStyle(color: Colors.red)),
      TextSpan(
          text: "蓝色、", style: TextStyle(color: Colors.blue)),
      TextSpan(
          text: "绿色 ", style: TextStyle(color: Colors.green)),
    ],
  ),
);

TextSpan的参数children,可以是一个TextSpan对象的数组,这就比较有意思。每一个TextSpan都可以设置颜色和字体,这样我们就可以组合成一个多彩的文字结构。同样RichText也有textAlign参数,它是整个文字的位置参数。

13. 给文字添加点击事件

RichText(
  text: TextSpan(
    text: "添加了手势的文字: ",
    style: TextStyle(color: Colors.black),
    children: <TextSpan>[
      TextSpan(
        text: "点击会输出Log",
        style: TextStyle(color: Colors.blue),
        recognizer: TapGestureRecognizer()
          ..onTap = () {
            tapCount++;
            print("taped taped " + tapCount.toString());
          },
      ),
    ],
  ),
);

TextSpan可以给相应的文字添加手势,这样就可以满足我们点击某个文字触发事件的需求,这在日常开发中非常有效。我们就不需要搞一些"文字+按钮+文字+..."的这种组合了。
TextSpan的参数recognizer可以接收一个手势参数,当然这里的手势不仅有点击手势,还有滑动手势等等(具体的手势功能我们后面会讲到)。多种手势更是满足了我们更多的交互需求。

多彩文字和点击时间如下图:


2020_11_16_text_tap

想体验点击事件效果,可以到我的Github仓库项目里flutter_app->lib->routes->text_page.dart运行查看。

DefaultTextStyle

DefaultTextStyle是一个特殊的TextStyle。在DefaultTextStyle下面的所有子元素的文本样式都继承了DefaultTextStyle设置的文本样式。因此,我们只需要定义一个DefaultTextStyle,其下的所有文本样式都是该定义好的DefaultTextStyle的样式。这样就极大的方便我们来写一些统一的样式,而不需要每次都要写繁琐的设置样式的代码。

DefaultTextStyle(
  // 设置文本默认样式
  style: TextStyle(
    color: Colors.red,
    fontSize: 20.0,
  ),
  textAlign: TextAlign.start,
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: <Widget>[
      Text("DefaultTextStyle "),
      Text("DefaultTextStyle"),
      Text(
        "改变了的DefaultTextStyle",
        style: TextStyle(
            inherit: false, // 设置不再继承默认样式
            color: Colors.blue),
      ),
    ],
  ),
);

首先我们声明了一个DefaultTextStyle的样式,它是红色的,字号是20。
注意:这里有一个Textinherit设置了false,只有设置了false才允许不继承DefaultTextStyle的样式。而其他的两个Text对象,默认使用了DefaultTextStyle的样式。

效果如下:

2020_11_16_default_text

以上所有的代码都在我的Github仓库项目里flutter_app->lib->routes->text_page.dart里面,你可以下载下来运行并体验。

运行效果图如下:

2020_11_16_screen
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容