React Native Text组件修改部分文本样式。

静态文本:

“Text组件”作为最基础的文本组件,我们经常会在其上遇到这样的需求,一串文本信息,提取部分关键字改变其样式,比如高亮颜色改变等等。

比如实现:“我已阅读并同意《使用协议》《隐私条款》。”

通过嵌套Text组件可以很轻松实现。

<Text style={{ fontSize: 12, color: 'gray' }}>
	我已阅读并同意
	<Text style={{ color: 'blue' }}>《使用协议》</Text><Text style={{ color: 'blue' }}>《隐私条款》</Text></Text>

动态文本:

固定模板的静态文本很容易实现部分文本样式的修改,但是当文本关键字不固定的时候,比如动态传入一串文本,高亮其中所有数字(这里暂取整数、浮点数、百分数)。可以采用如下方法:

原文:

2019年10月到2020年9月,Github上开发者数量超过5600万;72%的财富50强公司在使用Github;超6000万新项目被创建;超过19亿的贡献被添加。在活跃用户的地理分布上,北美用户最多(34%),不过相较于去年北美用户减少了2%;亚洲次之(30.7%),亚洲用户增长了1.1%。这是负数-66.66%。

期望结果:

201910月到20209月,Github上开发者数量超过5600万;72%的财富50强公司在使用Github;超6000万新项目被创建;超过19亿的贡献被添加。在活跃用户的地理分布上,北美用户最多(34%),不过相较于去年北美用户减少了2%;亚洲次之(30.7%),亚洲用户增长了1.1%。这里是负数-66.66%

实现思路:
  1. 利用正则表达式匹配出所有数字:
const keyTextArr = content.match(/-?[0-9]+\.?[0-9]*%?/g);
  1. 利用正则表达式匹配出其他非数字部分:
const restTextArr = content.split(/-?[0-9]+\.?[0-9]*%?/g);
  1. 通过for循环组成一个新的内容数组,并为匹配出的数字增加样式标签:
const mainTextArr = [];
restTextArr.forEach((item, index) => {
    mainTextArr.push(item);
    if (keyTextArr && keyTextArr[index]) {
    	mainTextArr.push(
      		<Text style={{ color: 'blue' }}>
      			{keyTextArr[index]}
      		</Text>
      	);}
});
  1. 效果图:
    运行效果图
完整代码:
import React from 'react';
import { Text, View } from 'react-native';

const HelloWorldApp = () => {
  const renderContent = () => {
    let content =
      '2019年10月到2020年9月,Github上开发者数量超过5600万;72%的财富50强公司在使用Github;超6000万新项目被创建;超过19亿的贡献被添加。在活跃用户的地理分布上,北美用户最多(34%),不过相较于去年北美用户减少了2%;亚洲次之(30.7%),亚洲用户增长了1.1%。这是负数-66.66%。';

    const keyTextArr = content.match(/-?[0-9]+\.?[0-9]*%?/g);
    const restTextArr = content.split(/-?[0-9]+\.?[0-9]*%?/g);
    const mainTextArr = [];
    restTextArr.forEach((item, index) => {
      mainTextArr.push(item);
      if (keyTextArr && keyTextArr[index]) {
        mainTextArr.push(
          <Text style={{ color: 'blue' }}>{keyTextArr[index]}</Text>
        );
      }
    });

    return mainTextArr;
  };

  return (
    <View
      style={{
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
      }}>
      <Text style={{ fontSize: 12, color: 'gray' }}>{renderContent()}</Text>
    </View>
  );
};
export default HelloWorldApp;

### React NativeText 组件的使用方法 #### 基本用法 `Text` 是 React Native 提供的一个基础组件,用于显示文本内容。可以嵌套其他 `Text` 或者内联视图来创建复杂的结构。 ```jsx import React from 'react'; import { Text, View } from 'react-native'; export default function App() { return ( <View> <Text>Hello, world!</Text> {/* 显示简单文本 */} </View> ); } ``` #### 设置样式 通过 `style` 属性可自定义字体大小、颜色和其他 CSS 样式属性。 ```jsx const styles = StyleSheet.create({ text: { fontSize: 20, color: '#ff0000', }, }); // ... <Text style={styles.text}>Styled Text</Text> ``` #### 处理多行文本 当需要处理可能超过单行长度的内容时,可以通过设置 `numberOfLines` 来控制最大展示行数,并启用自动截断功能。 ```jsx <Text numberOfLines={2}> This is a very long string that will be cut off after two lines... </Text> ``` #### 支持 HTML 特殊字符 支持一些常见的 HTML 实体编码表示特殊字符,比如 & 表示 '&' 符号。 ```jsx <Text>This symbol "&" represents the ampersand character.</Text> ``` #### 文字对齐方式 利用 textAlign 属性调整文字水平方向上的排列位置;verticalAlign 则影响垂直方向的位置关系。 ```jsx <View style={{ flex: 1 }}> <Text style={{ textAlign: 'center' }}>Centered horizontally</Text> <Text style={{ verticalAlign: 'middle', height: 50 }}>Middle vertically within container of given height</Text> </View> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值