React Native組件(三)Text組件解析

前言

此前介紹了最基本的View組件辱志,接下來就是最常用的Text組件客冈,對于Text組件的一些常用屬性渠缕,這篇文章會給出簡單的例子以供學(xué)習(xí)馍忽。

1 概述

Text組件對應(yīng)于Android平臺的TextView棒坏,用來顯示文本。無論做什么應(yīng)用幾乎都要使用它遭笋,可以說是應(yīng)用最頻繁的組件之一坝冕。Text組件的內(nèi)部使用的并不是flexbox布局,而是文本布局瓦呼,因此想要使用flexbox設(shè)置文字居中是不可能的喂窟,解決方案就是在Text組件的外層套一層View,設(shè)置View的flexbox央串,具體的參考2.1節(jié)的例子代碼磨澡。

2 Style屬性

Text組件支持View組件的所有的Style屬性,不了解View組件的Style屬性可以查看React Native組件(二)View組件解析這篇文章质和。

2.1 字體相關(guān) Style屬性

Style屬性名 取值 說明
fontFamily enum('sans-serif', 'serif','monospace','sans-serif-light','sans-serif-thin','sans-serif-condensed','sans-serif-medium') 英文字符串的樣式
fontSize number 字體大小
fontStyle enum('normal', 'italic') 字體風(fēng)格是普通還是斜體
fontWeight enum('normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900') 字體粗細(xì)程度

舉個簡單的例子稳摄,如下所示。
index.android.js

import React, {Component} from 'react';
import {AppRegistry, StyleSheet, View, Text} from 'react-native';
class TextApp extends Component {
    render() {
        return (
            <View style={styles.viewStyle}>
                <Text style={styles.textStyle1}>itachi</Text>
                <Text style={styles.textStyle2}>itachi</Text>
                <Text style={styles.textStyle3}>itachi</Text>
            </View>
        );
    }
}
const styles = StyleSheet.create({
    viewStyle: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: 'white'
    },
    textStyle1: {
        fontFamily: 'monospace',
        fontSize: 20,
        fontStyle: 'normal',
        fontWeight: '900'
    },
    textStyle2: {
        fontFamily: 'serif',
        fontSize: 20,
        fontStyle: 'normal',
        fontWeight: '900'
    },
    textStyle3: {
        fontFamily: 'serif',
        fontSize: 20,
        fontStyle: 'italic',
        fontWeight: '300'
    }
});
AppRegistry.registerComponent('ViewSample', () => TextApp);

運行程序效果如下圖所示饲宿。

第一行和第二行對比秩命,發(fā)現(xiàn)monospace(等寬)字體要比serif字體要寬大些,筆畫更細(xì)一些褒傅。第二行和第三行做對比,可以明顯看出第三行是斜體字并且字體更細(xì)一些袄友。

2.2 陰影相關(guān) Style屬性

Style屬性名 取值 說明
textShadowColor color 陰影顏色
textShadowOffset {width: number, height: number} 陰影效果
textShadowRadius number 陰影圓角

改寫2.1小節(jié)的例子中styles的代碼殿托,如下所示。

const styles = StyleSheet.create({
    viewStyle: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: 'white'
    },
    textStyle1: {
        fontSize: 20,
        textShadowColor: 'blue',
        textShadowOffset: {width: 5, height: 5},
        textShadowRadius: 1
    },
    textStyle2: {
        fontSize: 20,
        textShadowColor: 'blue',
        textShadowOffset: {width: 5, height: 5},
        textShadowRadius: 5
    },
    textStyle3: {
        fontSize: 20,
        textShadowColor: 'blue',
        textShadowOffset: {width: 2, height: 2},
        textShadowRadius: 5
    }
});

運行效果如下圖所示剧蚣。


第一行和第二行對比支竹,可以看到textShadowRadius的值越大,陰影就會越不精細(xì)鸠按。第二行和第三行對比礼搁,textShadowOffset的width和height值越大,陰影的偏移量就會越大目尖。

2.3 平臺獨有的Style屬性

Style屬性名 取值 說明 平臺
includeFontPadding bool 默認(rèn)值是true馒吴,顯示文本時額外的字體填充 Android
textAlignVertical enum('auto', 'top', 'bottom', 'center') 垂直方向上文本對齊的方式 Android
letterSpacing number 每個字符之間的空間 iOS
textDecorationColor color 文本裝飾線條的顏色 iOS
textDecorationStyle enum('solid', 'double', 'dotted', 'dashed') 文本裝飾線條的風(fēng)格 iOS
writingDirection enum('auto', 'ltr', 'rtl') 文本的書寫方向 iOS

2.4 其他Style屬性

Style屬性名 取值 說明
textAlign enum('auto', 'left', 'right', 'center', 'justify') 文本對齊方式,justify只在iOS平臺有效瑟曲,在Android平臺等價于Left
textDecorationLine enum('none', 'underline', 'line-through', 'underline line-through') 橫線相關(guān)設(shè)置
lineHeight number 行的高度

我們設(shè)置不同的textDecorationLine的值饮戳,改寫2.1小節(jié)的例子中styles的代碼:

const styles = StyleSheet.create({
    viewStyle: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: 'white'
    },
    textStyle1: {
        fontSize: 20,
        textDecorationLine: 'underline',
    },
    textStyle2: {
        fontSize: 20,
        textDecorationLine: 'line-through',
    },
    textStyle3: {
        fontSize: 20,
        textDecorationLine: 'underline line-through',
    }
});

運行效果為:


3 屬性

3.1 ellipsizeMode

ellipsizeMode的取值為enum('head', 'middle', 'tail', 'clip') ,用來設(shè)定當(dāng)文本顯示不下全部內(nèi)容時,文本應(yīng)該如何被截斷洞拨,需要注意的是扯罐,它必須和numberOfLines(文本顯示的行數(shù))搭配使用,才會發(fā)揮作用烦衣。

  • head:從文本的開頭進(jìn)行截斷歹河,并在文本的開頭添加省略號掩浙,例如:...xyz。
  • middle :從文本的中間進(jìn)行截斷秸歧,并在文本的中間添加省略號厨姚,例如:ab...yz。
  • tail:從文本的末尾進(jìn)行截斷寥茫,并在文本的末尾添加省略號遣蚀,例如:abcd...。
  • clip :文本的末尾顯示不下的內(nèi)容會被截斷纱耻,并且不添加省略號芭梯,clip只適用于iOS平臺。

index.android.js

import React, {Component} from 'react';
import {AppRegistry, StyleSheet, View, Text} from 'react-native';
class TextApp extends Component {
    render() {
        let str = '宇智波鼬的終極忍術(shù)是伊邪那美弄喘。';
        return (
            <View style={styles.viewStyle}>
                <Text style={styles.textStyle} ellipsizeMode='head' numberOfLines={1}>{str}</Text>
                <Text style={styles.textStyle} ellipsizeMode='middle' numberOfLines={1}>{str}</Text>
                <Text style={styles.textStyle} ellipsizeMode='tail' numberOfLines={1}>{str}</Text>
            </View>
        );
    }
}
const styles = StyleSheet.create({
    viewStyle: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: 'white'
    },
    textStyle: {
        fontSize: 20,
        width: 150,
        padding: 1
    }
});
AppRegistry.registerComponent('ViewSample', () => TextApp);

分別設(shè)置ellipsizeMode的值為head玖喘、middle和tail。效果如下所示蘑志。

3.2 onPress/onLongPress

當(dāng)文本被點擊以后會調(diào)用onPress回調(diào)函數(shù)累奈,類似的還有onLongPress,當(dāng)文本被長按時會調(diào)用onLongPress回調(diào)函數(shù)急但。
index.android.js

import React, {Component} from 'react';
import {AppRegistry, StyleSheet, View, Text, Alert} from 'react-native';
class TextApp extends Component {
    render() {
        return (
            <View style={styles.viewStyle}>
                <Text onPress={onTextPress}>點擊文本</Text>
                <Text onLongPress={onLongTextPress}>長按文本</Text>
            </View>
        );
    }
}
const onTextPress = () => {
    Alert.alert('點擊文本彈出');
};
const onLongTextPress = () => {
    Alert.alert('長按文本彈出');
};
const styles = StyleSheet.create({
    viewStyle: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: 'white'
    },
});
AppRegistry.registerComponent('ViewSample', () => TextApp);

當(dāng)我們點擊第一個Text時澎媒,會彈出標(biāo)題為“點擊文本彈出”的Alert。長按第二個Text時波桩,會彈出標(biāo)題為“長按文本彈出”的Alert戒努。

3.3 其他屬性

屬性名 取值 說明 平臺
numberOfLines number 文本顯示的行數(shù)
selectable bool 默認(rèn)值為false,為true時可以被選擇并復(fù)制到系統(tǒng)剪切板中
selectionColor color 文本被選擇時的高亮顏色 Android
adjustsFontSizeToFit bool 默認(rèn)值為false镐躲,為true時字體會自動縮小储玫,以適應(yīng)給定的樣式約束 iOS
minimumFontScale number adjustsFontSizeToFit屬性為true時,設(shè)置字體的最小縮放比例萤皂,取值范圍為0.01~1.0 iOS

還有一些屬性這里沒有提到撒穷,比如方便失能人士使用手機(jī)而提供的相關(guān)屬性等等,具體的屬性請查看官方文檔裆熙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末端礼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子入录,更是在濱河造成了極大的恐慌齐媒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纷跛,死亡現(xiàn)場離奇詭異喻括,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贫奠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門唬血,熙熙樓的掌柜王于貴愁眉苦臉地迎上來望蜡,“玉大人,你說我怎么就攤上這事拷恨〔甭桑” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵腕侄,是天一觀的道長小泉。 經(jīng)常有香客問我,道長冕杠,這世上最難降的妖魔是什么微姊? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮分预,結(jié)果婚禮上兢交,老公的妹妹穿的比我還像新娘。我一直安慰自己笼痹,他們只是感情好配喳,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凳干,像睡著了一般晴裹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上救赐,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天涧团,我揣著相機(jī)與錄音,去河邊找鬼净响。 笑死,一個胖子當(dāng)著我的面吹牛喳瓣,可吹牛的內(nèi)容都是我干的馋贤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼畏陕,長吁一口氣:“原來是場噩夢啊……” “哼配乓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惠毁,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤犹芹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鞠绰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腰埂,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年蜈膨,在試婚紗的時候發(fā)現(xiàn)自己被綠了屿笼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牺荠。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖驴一,靈堂內(nèi)的尸體忽然破棺而出休雌,到底是詐尸還是另有隱情,我是刑警寧澤肝断,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布杈曲,位于F島的核電站,受9級特大地震影響胸懈,放射性物質(zhì)發(fā)生泄漏担扑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一箫荡、第九天 我趴在偏房一處隱蔽的房頂上張望魁亦。 院中可真熱鬧,春花似錦羔挡、人聲如沸洁奈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽利术。三九已至,卻和暖如春低矮,著一層夾襖步出監(jiān)牢的瞬間印叁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工军掂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留轮蜕,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓蝗锥,卻偏偏與公主長得像跃洛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子终议,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容