React Native基础:8-Text组件
Text组件简介
Text组件基本上是任何App都必需要使用的一个组件。一个用于显示文本的React组件,并且它也支持嵌套、样式,以及触摸处理。内层的组件会继承外层的样式,并且内存组件的样式优先级会比外层高。也就是说如果外层组件定义了文本字体为宋体,而内层组件定义的是微软雅黑,最终显示出来的是微软雅黑的字体。
React Native中的Text组件包含了如下几个常用的属性。
| 属性/方法名称 | 类型 | 说明 |
| --- | --- | --- |
|adjustsFontSizeToFit |bool| 指定字体是否跟随指定样式的限制而自动缩放。|
|allowFontScaling| bool|控制字体是否根据系统的“字体大小”辅助选项来进行缩放|
|minimumFontScale| bool|当adjustsFontSizeToFit开启时,指定最小的缩放比,即不能低于该值,可设定的值为0.01 - 1.0|
|numberOfLines| number|当文本过长的时裁剪文本,包括折叠产生的换行在内,总的行数不会超过这个属性的限制。|
|onLayout| function|当挂载或者布局变化后调用此回调函数。|
|onLongPress| function|当文本被长按以后调用此回调函数。|
|onPress| function|当文本被点击以后调用此回调函数。|
|selectable| function|是否允许用户长按选择文本,以便复制和粘贴。|
|suppressHighlighting| bool|当值为true时,如果文本被按下,则没有任何视觉效果。默认情况下,文本被按下时会有一个灰色的、椭圆形的高光效果。|
Text组件使用示例
下方的示例代码中,我们使用Text组件显示若干行文字,并对显示文字的样式进行了设置。
- 在终端中执行如下命令,创建名称为TextDemo的工程
react-native init TextDemo
- 使用Atom打开TextDemo工程的index.ios.js文件,编写Text组件所使用的样式
const styles = StyleSheet.create({
baseText: {
fontFamily: 'Cochin',
flex: 1,
},
titleText: {
fontSize: 20,
fontWeight: 'bold',
},
});
- 在默认的TextDemo组件中,添加Text组件。在下方的代码中,我们对Text组件的样式进行了设置,并且对Text组件进行了嵌套操作。
export default class TextDemo extends Component {
render() {
return (
<Text style={styles.baseText}>
<Text style={styles.titleText}>
{'\n Hello 99iOS'}
</Text>
<Text numberOfLines={3}>
{"\n 欢迎访问\n 九九学院\n www.99iOS.com"}
</Text>
</Text>
);
}
}
- 使用import加载项目所使用的模块,并且注册组件TextDemo成为整个应用的根容器
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
} from 'react-native';
AppRegistry.registerComponent('TextDemo', () => TextDemo);
- 在终端中执行下面的命令运行程序,在iOS模拟器中可以看到显示的文字信息以及文字的样式。
react-native run-ios
注意事项
Text元素在布局上不同于其它组件:在Text内部的元素不再使用Flexbox布局,而是采用文本布局。Text内部的元素不再是一个个‘盒子’,而可能会在行末进行折叠。所以如果对Text组件style设置flexDirection: 'column'是无效的。
为了验证Text组件的布局特性,下面的测试代码中,Text组件里面的所有子Text组件都会按顺序排列,看上去就像一个Text组件。
export default class TextDemo extends Component {
render() {
return (
<Text>
<Text style={styles.titleText}>
{'\n Hello'}
</Text>
<Text style={styles.titleText}>
{' 99iOS'}
</Text>
</Text>
);
}
}
另外,我们把所有子Text组件装入一个View组件中,此时每一个Text组件都是一个“盒子”。
export default class TextDemo extends Component {
render() {
return (
<View>
<Text style={styles.titleText}>
{'\n Hello'}
</Text>
<Text style={styles.titleText}>
{' 99iOS'}
</Text>
</View>
);
}
}