移动应用上的用户交互基本靠“摸”。当然,“摸”也是有各种姿势的:在一个按钮上点击,在一个列表上滑动,或是在一个地图上缩放。React Native提供了可以处理常见触摸手势(例如点击或滑动)的组件,以及可用于识别更复杂的手势的完整的手势响应系统。
显示一个简单的按钮
Button是一个简单的跨平台的按钮组件。下面是一个最简单的示例:
上面这段代码会在iOS上渲染一个蓝色的标签状按钮,在Android上则会渲染一个蓝色圆角矩形带白字的按钮。点击这个按钮会调用”onPress“函数,具体作用就是显示一个alert弹出框。你还可以指定”color“属性来修改按钮的颜色。
再试试下面这个使用Button的例子吧。你可以点击”Tap to Play“来预览真实效果。(下面会显示一个嵌在网页中的手机模拟器,国内用户可能打不开这个网页模拟器,或速度非常慢)。
import React, { Component } from 'react';
import { Alert, Button, StyleSheet, View } from 'react-native';
export default class ButtonBasics extends Component {
_onPressButton() {
Alert.alert('You tapped the button!')
}
render() {
return (
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
},
buttonContainer: {
margin: 20
},
alternativeLayoutButtonContainer: {
margin: 20,
flexDirection: 'row',
justifyContent: 'space-between'
}
})
运行结果如图
Touchable系列组件
这个组件的样式是固定的,所以如果它的外观并不怎么搭配你的设计,那就需要使用TouchableOpacity
或是TouchableNativeFeedback
组件来定制自己所需要的按钮,你可以在github.com网站上搜索’react native button‘来看看社区其他人的作品。
具体使用哪种组件,取决于你希望给用户什么样的视觉反馈:
- 一般来说,你可以使用TouchableHighlight来制作按钮或者连接。注意此组件的背景会在用户手指按下时变暗。
- 在Android上还可以使用TouchableNativeFeedback,它会在用户手指按下时行程类似墨水涟漪的视觉效果。
- TouchableOpacity会在用户手指按下时降低按钮的透明度,而不会改变背景的颜色。
- 如果你想在处理点击事件的同时不显示任何视觉反馈,则需要使用TouchableWithoutFeedback。
某些场景中你可能需要检测用户是否进行了长按操作。可以在上面列出的人已组建中使用onLongPress
属性来实现。
我们来看一下示例:
import React, { Component } from 'react';
import { Alert, Platform, StyleSheet, Text, TouchableHighlight, TouchableOpacity, TouchableNativeFeedback, TouchableWithoutFeedback, View } from 'react-native';
export default class Touchables extends Component {
_onPressButton() {
Alert.alert('You tapped the button!')
}
_onLongPressButton() {
Alert.alert('You long-pressed the button!')
}
render() {
return (
TouchableHighlight
TouchableOpacity
TouchableNativeFeedback
TouchableWithoutFeedback
Touchable with Long Press
);
}
}
const styles = StyleSheet.create({
container: {
paddingTop: 60,
alignItems: 'center'
},
button: {
marginBottom: 30,
width: 260,
alignItems: 'center',
backgroundColor: '#2196F3'
},
buttonText: {
textAlign: 'center',
padding: 20,
color: 'white'
}
})
运行结果如图
截图看不出效果,点击各个按钮时会出现不同的点击效果
另一个在移动应用中常见的手势就是滑动。用户会在列表中上下滑动,或是在视图上左右滑动。要处理这样的手势,下面一章学习的就是如何使用滚动视图。