[TOC]

概述

移动应用上的用户交互基本靠“摸”。当然,“摸”也是有各种姿势的:在一个按钮上点击,在一个列表上滑动,或是在一个地图上缩放。React Native 提供了可以处理常见触摸手势(例如点击或滑动)的组件, 以及可用于识别更复杂的手势的完整的手势响应系统。

显示一个简单的按钮

Button是一个简单的跨平台的按钮组件。下面是一个最简示例:

1
2
3
4
5
6
<Button
onPress={() => {
Alert.alert("你点击了按钮!");
}}
title="点我!"
/>

上面这段代码会在 iOS 上渲染一个蓝色的标签状按钮,在 Android 上则会渲染一个蓝色圆角矩形带白字的按钮。点击这个按钮会调用”onPress”函数,具体作用就是显示一个 alert 弹出框。你还可以指定”color”属性来修改按钮的颜色。

再试试下面这个使用Button的例子吧。你可以点击”Tap to Play”来预览真实效果。(下面会显示一个嵌在网页中的手机模拟器,国内用户可能打不开这个网页模拟器,或速度非常慢)。

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
/**
* 移动应用上的用户交互基本靠“摸”。
* 当然,“摸”也是有各种姿势的:在一个按钮上点击,在一个列表上滑动,或是在一个地图上缩放。
* React Native 提供了可以处理常见触摸手势(例如点击或滑动)的组件,
* 以及可用于识别更复杂的手势的完整的手势响应系统。
*/
import React, { Component } from 'react';
// 从“react-native” 导入以下这些控件
import { Platform, StyleSheet, TextInput, View, Image, Button, Alert } from 'react-native';


/**
* 默认导出的组件
*/
export default class DemoButtonApp extends Component {
_onPressButton() {
Alert.alert('You tapped the button!')
}

render() {
return (
// 属性字段为styles.container
<View style={styles.container}>

{/* 增加一个Button View */}
<View
style={styles.buttonContainer}>
<Button
onPress={this._onPressButton}
title="Click Me"
/>
</View>
{/* 增加一个不同的颜色的Button View */}
<View style={styles.buttonContainer}>
<Button
onPress={this._onPressButton}
title="Press Me"
color="#841584"
/>
</View>


{/* 增加一个竖直方向方向的Button View */}
<View style={styles.buttonContainer}>
<Button
onPress={this._onPressButton}
title="This looks great!"
/>
<Button
onPress={this._onPressButton}
title="OK!"
color="#841584"
/>
</View>


{/* 增加一个水平方向的Button View */}
<View style={styles.alternativeLayoutButtonContainer}>
<Button
onPress={this._onPressButton}
title="This looks great!"
/>
<Button
onPress={this._onPressButton}
title="OK!"
color="#841584"
/>
</View>

</View>
);
}
}

const styles = StyleSheet.create({
container: {
//flexDirection: 'row', // 设置控件排列方向,为按行排列。也就是横向排列
flexDirection: 'column', // 设置控件排列方向,为按列排列。也就是竖向排列(默认也是竖向排列)
flex: 1,

// flex-start 表示在靠近主轴的起始段
justifyContent: 'center',
// alignItems: 'center', // 沿次轴方向居中对齐
// backgroundColor: '#C5FCFF',
},
buttonContainer: {
margin: 20
},
alternativeLayoutButtonContainer: {
margin: 20,
flexDirection: 'row', // 设置控件排列方向,为按行排列。也就是横向排列
justifyContent: 'space-between' // child在主轴方向相邻child等间距对齐,首尾child与父容器对齐
}
});