??從本篇開始堆生,將對(duì)Flutter的基礎(chǔ)控件進(jìn)行講解专缠。
??Flutter中的Text相當(dāng)于Android中的TextView,屬于最常用的Widget之一了淑仆。
??Text構(gòu)造函數(shù)如下
const Text(this.data, {
Key key, // 選填參數(shù)涝婉,Key類型,Widget的標(biāo)識(shí)蔗怠,
this.style, // 選填參數(shù)墩弯,TextStyle類型,文本樣式
this.strutStyle, // 選填參數(shù)寞射,StrutStyle類型渔工,設(shè)置每行的最小行高
this.textAlign, // 選填參數(shù),TextAlign類型桥温,文本的對(duì)齊方式
this.textDirection, // 選填參數(shù)涨缚,TextDirection類型,文字方向
this.locale, // 選填參數(shù)策治,Local類型脓魏,用于選擇用戶語言和格式設(shè)置首選項(xiàng)的標(biāo)識(shí)符
this.softWrap, // 選填參數(shù),bool類型通惫,是否支持軟換行符茂翔,如果是 false 的話,這個(gè)文本只有一行履腋,水平方向是無限的
this.overflow, // 選填參數(shù)珊燎,TextOverflow類型,文本的截?cái)喾绞? this.textScaleFactor, // 選填參數(shù)遵湖,double類型悔政,代表文本相對(duì)于當(dāng)前字體大小的縮放因子,默認(rèn)值為1.0
this.maxLines, // 選填參數(shù)延旧,int類型谋国,顯示的最大行數(shù)
this.semanticsLabel, // 選填參數(shù),String類型迁沫,給文本加上一個(gè)語義標(biāo)簽(用不到)
}) : assert(data != null),
textSpan = null,
super(key: key);
...
}
??常用屬性如下:
屬性 | 說明 |
---|---|
textAlign | 文本位置(TextAlign.left芦瘾,TextAlign.right捌蚊,TextAlign.center) |
overflow | 超出文本顯示樣式(TextOverflow.ellipsis,TextOverflow.clip,TextOverflow.fade) |
maxLines | 最大行數(shù) |
softWrap | 是否換行 |
style | TextStyle文本樣式 |
TextStyle構(gòu)造函數(shù)如下:
class TextStyle extends Diagnosticable {
const TextStyle({
this.inherit = true, // 可選,類型 bool近弟,是否繼承父 Text 的樣式缅糟,默認(rèn)為 true,如果為 false祷愉,且樣式?jīng)]有設(shè)置具體的值窗宦,則采用默認(rèn)值:白色、大小 10px二鳄、sans-serif 字體
this.color, // 可選赴涵,類型 Color,文字的顏色
this.fontSize, // 可選泥从,類型 Color,文字的大小
this.fontWeight, // 可選沪摄,類型 FontWeight躯嫉,字體粗細(xì)
this.fontStyle, // 可選,類型 FontStyle杨拐,是否在字體中傾斜字形
this.letterSpacing, // 可選祈餐,類型 double,字母之間的間隔
this.wordSpacing, // 可選哄陶,類型 double帆阳,字母之間的間隔
this.textBaseline, // 可選,類型 TextBaseLine屋吨,用于對(duì)齊文本的水平線
this.height, // 可選蜒谤,類型 double,文本的高度至扰,但它并不是一個(gè)絕對(duì)值鳍徽,而是一個(gè)因子,具體的行高等于 fontSize * height
this.locale, // 可選敢课,類型 Locale阶祭,用于選擇用戶語言和格式設(shè)置首選項(xiàng)的標(biāo)識(shí)符
this.foreground, // 可選,類型 Paint直秆,文本的前景色
this.background, // 可選濒募,類型 Paint,文本的背景色
this.shadows, // 可選圾结,類型 List<ui.Shadow>瑰剃,在文本下方繪制陰影
this.decoration, // 可選,類型 TextDecoration筝野,文本的線條
this.decorationColor, // 可選培他,類型 Color鹃两,TextDecoration 線條的顏色
this.decorationStyle, // 可選,類型 TextDecorationStyle舀凛,TextDecoration 線條的樣式
this.debugLabel, // 可選俊扳,類型 String,文本樣式的描述
String fontFamily, // 可選猛遍,類型 String馋记,用于設(shè)置使用那種自定義字體
List<String> fontFamilyFallback, // 可選,類型 String懊烤,字體列表梯醒,當(dāng)前面的字體找不到時(shí),會(huì)在這個(gè)列表里依次查找
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 | 文本大腥紫啊(默認(rèn)14) |
fontStyle | 字體樣式(FontStyle.italic 使用斜體,F(xiàn)ontStyle.normal 使用直立) |
textBaseline | 對(duì)齊文本的水平線: |
fontFamily | 文本字體 |
letterSpacing | 水平字母之間的空間間隔(邏輯像素為單位)壁肋『排撸可以使用負(fù)值來讓字母更接近 |
wordSpacing | 單詞之間添加的空間間隔(邏輯像素為單位)〗牛可以使用負(fù)值來使單詞更接近猫胁。 |
height | 文本行與行的高度,作為字體大小的倍數(shù)(取值1~2跛锌,如1.2) |
background | 文本背景色 |
foreground | 文本的前景色弃秆,不能與color共同設(shè)置 |
fontWeight | 繪制文本時(shí)使用的字體粗細(xì):FontWeight.bold 常用的字體重量比正常重。FontWeight.normal 默認(rèn)字體粗細(xì) |
decorationStyle | 繪制文本裝飾的樣式(畫一條虛線 TextDecorationStyle.dashed髓帽,畫兩條線 TextDecorationStyle.double菠赚,畫一條實(shí)線 TextDecorationStyle.solid,畫一條實(shí)線 TextDecorationStyle.solid) |
shadows | 背景設(shè)定(邊框郑藏、圓角锈至、陰影、形狀译秦、漸變峡捡、背景圖像等)詳見Decoration用法 |
??RichText
RichText富文本就是使文本呈現(xiàn)各式各樣的樣式,在Android中通過SpannableString/SpannableStringBuilder來實(shí)現(xiàn)富文本
RichText構(gòu)造函數(shù)
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 | 自動(dòng)換行 |
overflow | 文本超出部分顯示樣式 |
maxLines | 最大行數(shù) |
與Text不同筑悴,RichText的text屬性不是String類型们拙,而是TextSpan,這個(gè)TextSpan有點(diǎn)像Android富文本里面的ClickableSpan阁吝、ForegroundColorSpan等砚婆,TextSpan構(gòu)造函數(shù)如下:
TextSpan({
this.style,
this.text,
this.children,
this.recognizer,
this.semanticsLabel,
})
常用屬性
屬性 | 說明 |
---|---|
text | 文本內(nèi)容 |
style | TextStyle,文本風(fēng)格 |
children | TextPan列表,實(shí)現(xiàn)多個(gè)富文本 |
recognizer | 文本片段的手勢(shì)交互装盯,如點(diǎn)擊坷虑、長按事件 |
完整代碼
children: <Widget>[
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有一個(gè)靜態(tài)方法rich,可以達(dá)到RichText的效果埂奈。其實(shí)迄损,看一下Text的build方法可以知道,Text實(shí)際上是對(duì)RichText的包裝账磺。
@override
Widget build(BuildContext context) {
...
Widget result = RichText(
...
text: TextSpan(
...
text: data,
children: textSpan != null ? <TextSpan>[textSpan] : null,
),
);
...
return result;
}