• ReactNative: 使用Text文本组件


    一、简言

    初学RN,一切皆新。Text组件主要用于显示文本,Text组件的重要性不言而喻,无论是Web开发还是客户端开发,都离不开它。它具有响应特性,也即表现为当它被触摸时是否显示为高亮状态。在Web开发中,字体样式的继承十分重要,在body上设置字体可以作用到全部的文本标签,而RN中字体样式只有在Text组件上才起作用。它支持多层嵌套,由此它存在样式继承,内部的Text组件可以继承外部Text组件的样式,也即父组件定义了相关样式,如果子组件没有重写样式的话,那么该子组件也会继承父组件定义的样式。Text组件的布局方式和View组件的布局方式不同,View组件采用FlexBox伸缩盒子布局,而Text组件则采用的是文本布局,一个接一个Text组件横向排列,如果文本到达末尾,可以换行显示。总体来说,它的主要作用概括是显示基本的文本信息,除了基本的显示布局之外,也可以进行嵌套布局,设置样式,以及做事件处理。

    二、特性

    onPress:该属性的值是一个函数,表示按下事件或者叫手指触摸事件。当手指按下时被触发。

    numberOfLines该属性的值是一个数字,表示显示行数,如果超过该数值,则使用省略号{...}显示。

    allowFontScalling该属性的值是一个函数,控制字体是否根据iOS的设置进行自动缩放。

    onLayout:该属性的值是一个函数,用于获取该元素布局的位置和大小。例如{"target":7,"layout":{"x":10,"y":10,"width":100,"height":100}}。一般函数的事件形式为:

    //打印事件参数
    function(e){ console.log(e.nativeEvent) };

    三、样式

    除了继承了View组件的所有Style外,本身还具有如下样式属性:

    color:字体颜色 
    fontFamily:字体名称
    fontStlye:字体风格(normal,italic)
    fontWeight:字体粗细('normal','bold','100','200')
    fontSize:字体大小
    textShadowOffset:设置阴影效果{number,height:number}
    textShaowRadius:阴影效果圆角
    textShadowColr:阴影效果的颜色
    letterSpacing:字符间距
    lineHeight:行高
    textAlign:文本对齐方式('auto','left','right','')
    textDecorationLine:横线位置('none','underline','line-through','underline line-through')
    textDecorationStyle:线的风格('solid','')
    textDecorationColor:线的颜色
    writingDirection:文本方向('auto','ltr','rtl')

    四、示例

    注意:下面代码中引入了PixelRatio API,PixelRatio的get方法用于获取高清设备的像素比。

    NavHead.js:

    //采用React.createClass创建组件
    const React = require('react');
    const ReactNative = require('react-native')
    const {
        StyleSheet,
        View,
        Text,
        PixelRatio
    } = ReactNative;
    
    const NavHead = React.createClass({
    
        //打印事件参数
        print(e){
            console.log(e.nativeEvent)
        },
    
        render(){
            return (
                <View style={styles.parent}>
                    <View style={styles.flex}>
                        <Text style={styles.title}>
                            <Text style={styles.title1} onPress={this.print}>網易</Text>
                            <Text style={styles.title2}>新闻</Text>
                            <Text style={styles.pk}> pk </Text>
                            <Text style={styles.title1}>紟日</Text>
                            <Text style={styles.title2}>头条</Text>
                        </Text>
                    </View>
                </View>
            )
        }
    });
    
    const styles = StyleSheet.create({
        parent:{
            height: 75,
            backgroundColor: '#EEE'
        },
        flex: {
            marginTop: 25,
            height: 50,
            borderBottomWidth: 2/PixelRatio.get(),
            borderBottomColor: '#EF2D36',
            alignItems: 'center'
        },
        title: {
            fontSize: 25,
            fontWeight: 'bold',
            textAlign: 'center'
        },
        pk: {
            color: 'green'
        },
        title1 :{
            color: '#CD1D1C'
        },
        title2: {
            color: '#FFFFFF',
            backgroundColor: '#CD1D1C'
        }
    });
    
    module.exports = NavHead;

    index.ios.js:

    /**
     * Sample React Native App
     * https://github.com/facebook/react-native
     * @flow
     */
    
    import React, { Component } from 'react';
    import NavHead from './src/NavHead'
    import List from './src/List'
    
    import {
      AppRegistry,
      StyleSheet,
      View
    } from 'react-native';
    
    
    export default class ReactNativeDemo extends Component {
    
      render() {
        return (
            <View style={styles.container}>
              <NavHead/>
              <List/>
            </View>
        );
      }
    }
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        backgroundColor: 'white'
      }
    });
    
    AppRegistry.registerComponent('ReactNativeDemo', () => ReactNativeDemo);

    五、打印

    2019-12-07 22:28:46.298 [info][tid:com.facebook.react.JavaScript] { target: 7,
      pageY: 42.5,
      locationX: 17,
      force: 0,
      locationY: 17.5,
      identifier: 1,
      pageX: 83.5,
      timestamp: 143715461.59643,
      changedTouches: [ [Circular] ],
      touches: [] }

  • 相关阅读:
    webpack学习笔记(五)
    webpack学习笔记(四)
    webpack学习笔记(三)
    directives 自定义指令
    css面试--基础
    css面试--H5移动端
    vue watch和computed的使用场景
    JS继承的实现方式
    js面试--ajax与性能优化
    js面试--概念
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/12003658.html
Copyright © 2020-2023  润新知