React Native add bold or italics to single words in field

后端 未结 12 2555
攒了一身酷
攒了一身酷 2020-12-13 05:14

How do I make a single word in a Text field bold or italics? Kind of like this:

This is a sentence with one word in bold

        
相关标签:
12条回答
  • 2020-12-13 05:59

    Nesting Text components is not possible now, but you can wrap your text in a View like this:

    <View style={{flexDirection: 'row', flexWrap: 'wrap'}}>
        <Text>
            {'Hello '}
        </Text>
        <Text style={{fontWeight: 'bold'}}>
            {'this is a bold text '}
        </Text>
        <Text>
            and this is not
        </Text>
    </View>
    

    I used the strings inside the brackets to force the space between words, but you can also achieve it with marginRight or marginLeft. Hope it helps.

    0 讨论(0)
  • 2020-12-13 06:01

    It is not in a text field as asked but wrapping separate text elements into a view would give the desired output. This can be used if you don't want to add another library into your project just for styling a few texts.

    <View style={{flexDirection: 'row'}}>
     <Text style={{fontWeight: '700', marginRight: 5}}>Contact Type:</Text>
     <Text>{data.type}</Text>
    </View>
    

    Would result as follows

    0 讨论(0)
  • 2020-12-13 06:02
    <Text>
        <Text style={{fontWeight: "bold"}}>bold</Text>
        normal text
        <Text style={{fontStyle: "italic"}}> italic</Text>
    </Text>
    
    0 讨论(0)
  • 2020-12-13 06:03

    you can use https://www.npmjs.com/package/react-native-parsed-text

    import ParsedText from 'react-native-parsed-text';
     
    class Example extends React.Component {
      static displayName = 'Example';
     
      handleUrlPress(url) {
        LinkingIOS.openURL(url);
      }
     
      handlePhonePress(phone) {
        AlertIOS.alert(`${phone} has been pressed!`);
      }
     
      handleNamePress(name) {
        AlertIOS.alert(`Hello ${name}`);
      }
     
      handleEmailPress(email) {
        AlertIOS.alert(`send email to ${email}`);
      }
     
      renderText(matchingString, matches) {
        // matches => ["[@michel:5455345]", "@michel", "5455345"]
        let pattern = /\[(@[^:]+):([^\]]+)\]/i;
        let match = matchingString.match(pattern);
        return `^^${match[1]}^^`;
      }
     
      render() {
        return (
          <View style={styles.container}>
            <ParsedText
              style={styles.text}
              parse={
                [
                  {type: 'url',                       style: styles.url, onPress: this.handleUrlPress},
                  {type: 'phone',                     style: styles.phone, onPress: this.handlePhonePress},
                  {type: 'email',                     style: styles.email, onPress: this.handleEmailPress},
                  {pattern: /Bob|David/,              style: styles.name, onPress: this.handleNamePress},
                  {pattern: /\[(@[^:]+):([^\]]+)\]/i, style: styles.username, onPress: this.handleNamePress, renderText: this.renderText},
                  {pattern: /42/,                     style: styles.magicNumber},
                  {pattern: /#(\w+)/,                 style: styles.hashTag},
                ]
              }
              childrenProps={{allowFontScaling: false}}
            >
              Hello this is an example of the ParsedText, links like http://www.google.com or http://www.facebook.com are clickable and phone number 444-555-6666 can call too.
              But you can also do more with this package, for example Bob will change style and David too. foo@gmail.com
              And the magic number is 42!
              #react #react-native
            </ParsedText>
          </View>
        );
      }
    }
     
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
      },
     
      url: {
        color: 'red',
        textDecorationLine: 'underline',
      },
     
      email: {
        textDecorationLine: 'underline',
      },
     
      text: {
        color: 'black',
        fontSize: 15,
      },
     
      phone: {
        color: 'blue',
        textDecorationLine: 'underline',
      },
     
      name: {
        color: 'red',
      },
     
      username: {
        color: 'green',
        fontWeight: 'bold'
      },
     
      magicNumber: {
        fontSize: 42,
        color: 'pink',
      },
     
      hashTag: {
        fontStyle: 'italic',
      },
     
    });

    0 讨论(0)
  • 2020-12-13 06:03

    Bold text:

    <Text>
      <Text>This is a sentence</Text>
      <Text style={{fontWeight: "bold"}}> with</Text>
      <Text> one word in bold</Text>
    </Text>
    

    Italic text:

    <Text>
      <Text>This is a sentence</Text>
      <Text style={{fontStyle: "italic"}}> with</Text>
      <Text> one word in italic</Text>
    </Text>
    
    0 讨论(0)
  • 2020-12-13 06:05

    You could just nest the Text components with the required style. The style will be applied along with already defined style in the first Text component.

    Example:

     <Text style={styles.paragraph}>
       Trouble singing in. <Text style={{fontWeight: "bold"}}> Resolve</Text>
     </Text>
    
    0 讨论(0)
提交回复
热议问题