[TOC]
概述 在 React Native 中,你并不需要学习什么特殊的语法来定义样式。我们仍然是使用 JavaScript 来写样式。所有的核心组件都接受名为style的属性。这些样式名基本上是遵循了 web 上的 CSS 的命名,只是按照 JS 的语法要求使用了驼峰命名法,例如将background-color改为backgroundColor。
style属性可以是一个普通的 JavaScript 对象。这是最简单的用法,因而在示例代码中很常见。你还可以传入一个数组——在数组中位置居后的样式对象比居前的优先级更高,这样你可以间接实现样式的继承。
实际开发中组件的样式会越来越复杂,我们建议使用StyleSheet.create来集中定义组件的样式。比如像下面这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 import React, { Component } from 'react'; // 从“react-native” 导入以下这些控件 import { Platform, StyleSheet, Text, View, Image } from 'react-native'; const instructions = Platform.select({ ios: 'Press Cmd+R to reload,\n' + 'Cmd+D or shake for dev menu', android: 'Double tap R on your keyboard to reload,\n' + 'Shake or press menu button for dev menu', }); type Props = {}; export default class App extends Component<Props> { render() { // 声明图片 let pic = { uri: 'https://upload.wikimedia.org/wikipedia/commons/d/de/Bananavarieties.jpg' }; return ( // 给整体的VIew设置相同的属性。属性字段为styles.container <View style={styles.container}> <Text style={styles.welcome}>Welcome to React Native!</Text> <Text style={styles.instructions}>To get started, edit App.js</Text> <Text style={styles.instructions}>{instructions}</Text> {/* 添加自定义闪烁组件 */} <CustomStateComponent name="State 欢迎学习RN" /> {/* 通过source 和style这两个属性来给图片设置样式 */} <Image source={pic} style={{ width: 193, height: 110 }} /> </View> ); } } // 实际开发中组件的样式会越来越复杂,我们建议使用StyleSheet.create来集中定义组件的样式。 // 比如像下面这样: const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#C5FCFF', }, welcome: { fontSize: 20, textAlign: 'center', color: '#FE3333', margin: 10, }, instructions: { textAlign: 'center', color: '#333333', marginBottom: 5, }, }); // 我们可以通过继承自Components来创建自定义组件 /** * 创建一个自定义View的组件 * * 制作一段不停闪烁的文字。文字内容本身在组件创建时就已经指定好了,所以文字内容应该是一个prop。 * 而文字的显示或隐藏的状态(快速的显隐切换就产生了闪烁的效果)则是随着时间变化的,因此这一状态应该写到state中。 */ class CustomStateComponent extends Component { // 一般来说,我们需要在构造函数中来进行初始化State constructor(props) { super(props); // 构造函数初始状态设置显示与否的逻辑.首先设置显示文字 this.state = { isShowingText: true }; // 每1000毫秒对showText状态做一次取反操作 setInterval(() => { // 入参是之前的状态 this.setState(previousState => { return { isShowingText: !previousState.isShowingText }; }); }, 1000); } render() { // {/* 根据当前isShowingText的值决定是否显示text内容 */} if (!this.state.isShowingText) { return null; } return ( <View style={{ alignItems: 'center', marginTop: 50 }}> {/* 自定义组件里面比较简单,其实就是一个自定义的Text的View */} {/* 我们可以通过传入自定义组件的属性字段,来设置名字 */} <Text>你好 {this.props.name}!</Text> </View> ); } }
常见的做法是按顺序声明和使用style属性,以借鉴 CSS 中的“层叠”做法(即后声明的属性会覆盖先声明的同名属性)。
文本的样式定义请参阅Text 组件的文档 。
现在你已经了解如何调整文本样式了,下面我们要学习的是如何控制组件的尺寸。