Flutter-Text的使用

作者: 姜康 | 来源:发表于2019-07-29 20:39 被阅读1次

关注 https://github.com/jiangkang/flutter-system 了解更多Flutter相关的知识

文本作为UI最基本的元素,最基本的用法有这些:

  • 字体
  • 文字大小、颜色
  • 一些常用样式,比如倾斜,加粗,下划线,删除线等
  • 文字超出边界之后如何显示
  • 文字的单行,多行控制
  • 文字的显示方向
  • 富文本的显示
  • 文字渐变,阴影
  • 文本点击事件

字体

如果需要使用自定义字体,则需要在项目中的fonts文件夹下放置字体文件,然后在配置文件pubspec.yaml中进行配置:

flutter:
  fonts:
    - family: Raleway
      fonts:
        - asset: fonts/Raleway-Regular.ttf
        - asset: fonts/Raleway-Italic.ttf
          style: italic
    - family: RobotoMono
      fonts:
        - asset: fonts/RobotoMono-Regular.ttf
        - asset: fonts/RobotoMono-Bold.ttf
          weight: 700

使用字体主要有两种方式,一种是通过主题设置统一的字体,一种是为单独的Widget设置字体。

通过主题设置字体:

MaterialApp(
  title: 'Custom Fonts',
  // Set Raleway as the default app font.
  theme: ThemeData(fontFamily: 'Raleway'),
  home: MyHomePage(),
);

单独设置字体:

Text(
  'Roboto Mono sample',
  style: TextStyle(fontFamily: 'RobotoMono'),
);

文字大小,颜色,倾斜,加粗

这些样式也都是在TextStyle中设置的:

Text("style: color,fontWeight,fontSize,fontStyle",
              style: TextStyle(
                color: Colors.blueAccent,
                fontWeight: FontWeight.bold,
                fontSize: 28,
                fontStyle: FontStyle.italic,
              )),

其中fontSize使用的是逻辑像素,默认为14,FontWeight.bold表示加粗,当然还可以设置指定的值,fontStyle可以用来控制文本是否倾斜。

下划线/上划线,删除线,波浪线

下划线,删除线等属于文本装饰的一种,在TextStyle中通过decoration属性描述:

TextStyle(
                decoration: TextDecoration.underline,
                decorationColor: Colors.blueAccent,
                decorationStyle: TextDecorationStyle.solid),
          ),

效果如下:


text_underline

可以指定下划线的颜色,样式,比如线的实现,还是虚线,还是波浪线等;
对于这些装饰,还可以设置双下划线,点线等效果。


text_underline_double

文字超出边界如何显示

超出边界的显示有三种类型:

  • 显示省略号
  • 直接截断
  • 渐隐

这几种显示样式都是通过overflow属性控制的:

ListTile(
          title: Text(
            "overflow: TextOverflow.ellipsis;overflow: TextOverflow.ellipsis;overflow: TextOverflow.ellipsis;",
            overflow: TextOverflow.ellipsis,
            softWrap: false,
          ),
        ),
        ListTile(
          title: Text(
            "overflow: TextOverflow.clip;overflow: TextOverflow.clip;overflow: TextOverflow.clip;",
            overflow: TextOverflow.clip,
            softWrap: false,
          ),
        ),
        ListTile(
          title: Text(
            "overflow: TextOverflow.fade,overflow: TextOverflow.fade,overflow: TextOverflow.fade,overflow: TextOverflow.fade,",
            overflow: TextOverflow.fade,
            softWrap: false,
          ),
        ),

文字的单行与多行显示

文本的多行显示,可以通过maxLines属性和softWrap属性控制,其中maxLines控制最大行数,softWrap控制是否自动换行。

Text(
            "softWrap: false;softWrap: false;softWrap: false;softWrap: false;softWrap: false;softWrap: false;",
            softWrap: false,
          )
Text(
            "softWrap: true;softWrap: true;softWrap: true;softWrap: true;softWrap: true;",
            softWrap: true,
          )

富文本

可以使用Text.rich/ RichText + TextSpan来显示富文本:

Text.rich(
            TextSpan(
              text: "plain text ",
              children: <TextSpan>[
                TextSpan(
                    text: "color", style: TextStyle(color: Colors.pinkAccent)),
                TextSpan(text: "fontSize", style: TextStyle(fontSize: 28)),
                TextSpan(
                    text: "decoration",
                    style: TextStyle(decoration: TextDecoration.lineThrough)),
              ],
            ),
          )
rich_text
RichText(
              text: TextSpan(
            children: <TextSpan>[
              TextSpan(
                  text: "Text 1", style: TextStyle(color: Colors.blueAccent)),
              TextSpan(
                  text: "Text 2",
                  style: TextStyle(color: Colors.pinkAccent, fontSize: 28)),
            ],
          ))
rich_text_2

文字阴影

文字的阴影可以通过TextStyle中的shadows属性进行控制:

Text(
            "style: letterSpacing,shadows",
            style: TextStyle(
              shadows: <Shadow>[
                Shadow(color: Colors.pink, offset: Offset(1, 2))
              ],
            ),
          )
text_shadow

Text的点击事件

可以使用GestureDetector,也可以使用InkWell:

InkWell(
            child: Text(
              "Default Text",
            ),
            onTap: (){debugPrint("click");},
          )

相关文章

  • Flutter-Text使用

    Flutter-Text使用 Text定义 在编译器里面点击Text这个Widget进入查看,可以看到Text是属...

  • Flutter-Text的使用

    关注 https://github.com/jiangkang/flutter-system 了解更多Flutte...

  • Flutter-Text(UILabel)

    overflow属性 类似与UILabel中的lineBreakMode clip:直接切断,剩下的文字就没有了,...

  • Flutter-Text文本组件

    在开发中,文本是我们最常接触的控件。这篇博客来分享一下Flutter中的Text文本组件,我们展示的文本都可以用这...

  • iconfont的使用(下载使用)

    1、下载文件 2、在生命周期中引入项目 beforeCreate () { var domModule = ...

  • Gson的使用--使用注解

    Gson为了简化序列化和反序列化的过程,提供了很多注解,这些注解大致分为三类,我们一一的介绍一下。 自定义字段的名...

  • 记录使用iframe的使用

    默认记录一下----可以说 这是我第一次使用iframe 之前都没有使用过; 使用方式: 自己开发就用了这几个属...

  • with的使用

    下面例子可以具体说明with如何工作: 运行代码,输出如下

  • this的使用

    什么是this? this是一个关键字,这个关键字总是返回一个对象;简单说,就是返回属性或方法“当前”所在的对象。...

  • this的使用

    JS中this调用有几种情况 一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象...

网友评论

    本文标题:Flutter-Text的使用

    本文链接:https://www.haomeiwen.com/subject/gksirctx.html