天天看點

Flutter基礎元件詳解-Text的使用

Text最基本的用法有這些:

  • 字型
  • 顔色,字型,大小,背景
  • 文本的對齊方式,可以選擇左對齊、右對齊還是居中對齊
  • TextSpan,它代表文本的一個“片段”
  • 設定某一個節點處設定一個預設的文本樣式
  • 文本點選事件
  • 富文本的顯示 ,文字,陰影

基本使用

Text 用來顯示單一樣式的文本字元串,

Container(
              child: Text(
                "多行文本顯示時,隻顯示 maxLines,多餘文本通過 overflow 處理 " * 7,
                ///overflow:文本溢出時,多餘文本的處理方式,可以配合 maxLines 使用。
                overflow: TextOverflow.ellipsis,

                ///當文本跨行,頁面顯示的最大行數。
                maxLines: 1,
              ),
            ),
            Container(
              child: Text(
                "文字縮放倍數",
                /// textScaleFactor:相當于目前字型大小的縮放比例,它是設定 fontSize 屬性的快捷方式。
                textScaleFactor: 1.5,
              ),
            )
           
Flutter基礎元件詳解-Text的使用

字型

如果需要使用自定義字型,則需要在項目中的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

通過主題設定字型:

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'),
);
           

style 屬性用來指定文本的顯示方式,例如顔色,字型,大小,背景,裝飾等等

Container(
                child: Text(
              "textStyle 的用法 " * 2,
              style: TextStyle(
                ///color:文本顔色。文本的前景色,不能與 foreground 共同設定。
                color: Colors.deepOrange,

                ///fontSize:字型大小( pt、sp ),預設為 14 個邏輯像素( 14pt、14sp )。
                fontSize: 20.0,

                ///height:指定行高,但它并不是一個絕對值
                height: 2.0,

                ///fontFamily:使用的字型名稱
                fontFamily: "MicroSoft Yahei",

                ///fontStyle:字型的顯示方式,如 FontStyle.italic 為斜體
                fontStyle: FontStyle.italic,

                ///fontWeight:繪制文本時使用的字型粗細
                fontWeight: FontWeight.bold,

                ///background:文本背景色
                background: new Paint()..color = Colors.yellow,
                /*decoration:繪制文本裝飾

                  TextDecoration.underline:下劃線
                TextDecoration.overline:上劃線
                TextDecoration.lineThrough:删除線
                  TextDecoration.none:無(預設)*/
                decoration: TextDecoration.underline,
                /*decorationStyle:繪制文本裝飾的樣式

                  TextDecorationStyle.dashed:一條虛線(短橫線)
                TextDecorationStyle.dotted:一條虛線 (點)
                TextDecorationStyle.solid:一條實線
                TextDecorationStyle.double:兩條實線
                TextDecorationStyle.wavy:一條波浪線*/

                decorationStyle: TextDecorationStyle.dashed,
              ),
            )),
            Container(
                padding: EdgeInsets.only(top: 80),
                child: Text(
                  '單行文字間隔,中文無效。How are you',

                  ///wordSpacing:單行文字間隔,中文無效
                  style: TextStyle(wordSpacing: 20),
                )),
            Container(
                padding: EdgeInsets.only(top: 80),
                child: Text(
                  '文本字與字之間間隔。How are you',

                  ///letterSpacing:文本字與字之間間隔
                  style: TextStyle(letterSpacing: 20),
                ))
           
Flutter基礎元件詳解-Text的使用

textAlign

文本的對齊方式,可以選擇左對齊、右對齊還是居中對齊:

Container(
  width: 300.0,
  child: Text(
    "這裡示範 textAlign.left 的用法 ",
    textAlign: TextAlign.left,
  ),
),
Container(
  width: 300.0,
  child: Text(
    "這裡示範 textAlign.center 的用法 ",
    textAlign: TextAlign.center,
  ),
),
Container(
  width: 300.0,
  child: Text(
    "這裡示範 textAlign.right 的用法 ",
    textAlign: TextAlign.right,
  ),
),
           
Flutter基礎元件詳解-Text的使用

textSpan

在上面的例子中,Text 的所有文本内容隻能按同一種樣式,如果我們需要對一個 Text 内容的不同部分按照不同的樣式顯示,這時就可以使用 TextSpan,它代表文本的一個“片段”。

Container(
                child: Text.rich(TextSpan(children: [
              TextSpan(text: "Home:"),
              TextSpan(
                text: "https://blog.csdn.net/timtian008",
                style: TextStyle(color: Colors.blue),
              ),
              TextSpan(
                text: " 請點選連結",
                style: TextStyle(
                  color: Colors.red,
                  fontStyle: FontStyle.italic,
                ),
              ),
            ]))),
           
Flutter基礎元件詳解-Text的使用

DefaultTextStyle

在 widget 樹中,文本的樣式預設是可以被繼承的,是以,如果在 widget 樹的某一個節點處設定一個預設的文本樣式,那麼該節點的子樹中所有文本都會預設使用這個樣式,而 DefaultTextStyle 正是用于設定預設文本樣式的。

Container(
                child: DefaultTextStyle(
              textAlign: TextAlign.center,
              style: TextStyle(
                color: Colors.red,
                fontSize: 20.0,
              ),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  Container(
                    width: double.infinity,
                    child: Text("這裡示範 DefaultTextStyle 的用法"),
                  ),
                  Text("這裡示範 DefaultTextStyle 的用法"),
                  Text(
                    "這裡沒有繼承預設字型樣式",
                    style: TextStyle(
                      inherit: false,
                      color: Colors.grey,
                    ),
                  ),
                ],
              ),
            )),
           
Flutter基礎元件詳解-Text的使用

Text的點選事件

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

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

**富文本 **

可以使用Text.rich/ RichText + TextSpan來顯示富文本文字陰影

文字的陰影可以通過TextStyle中的shadows屬性進行控制:

Container(
                child: 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)),
                ],
              ),
            )),
            Container(
              child: 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)),
                ],
              )),
            )
           
Flutter基礎元件詳解-Text的使用