当前位置:   article > 正文

react-native Touchable介绍和使用_reativenative touchable

reativenative touchable

本文转载自   https://www.jianshu.com/p/a840d2e9a312

 

一 前言

   1.React Native 中,手势监听的两种方式

        ①.标签中有许多 on 开头的属性

           在不同标签上有的属性是不能做出相应的响应的,比如下面的例子,同样的属性,在View上不可使用,在Text上就可以

  1. var textInputTest = React.createClass({
  2. render(){
  3. return(
  4. <View style={styles.container}>
  5. {/* 实例化一个View */}
  6. <View style={styles.testViewStyle} onPressIn={() => {alert('点击')}}>
  7. </View>
  8. {/* 实例化一个Text */}
  9. <Text style={styles.testTextStyle} onPress={() => {alert('点击')}}></Text>
  10. </View>
  11. );
  12. }
  13. });
  14. var styles = StyleSheet.create({
  15. container: {
  16. flex:1,
  17. backgroundColor:'gray'
  18. },
  19. testViewStyle: {
  20. // 设置尺寸
  21. width:width,
  22. height:40,
  23. marginTop:20,
  24. // 设置背景颜色
  25. backgroundColor:'red'
  26. },
  27. testTextStyle: {
  28. // 设置尺寸
  29. width:width,
  30. height:40,
  31. marginTop:20,
  32. // 设置背景颜色
  33. backgroundColor:'yellow'
  34. }
  35. });

效果:

 

     ②.为了避免上面问题,在开发中推荐使用 Touchable 的方式来实现用户点击事件的包装

  1. import {
  2. AppRegistry,
  3. StyleSheet,
  4. Text,
  5. View,
  6. TouchableOpacity
  7. } from 'react-native';

效果:

完成上面的步骤我们就可以使用Touchable来包装我们的标签了,格式如下

  1. <TouchableOpacity Touchable属性>
  2. <需要包装的标签></需要包装的标签>
  3. </TouchableOpacity>

这里就来将上面的方式更改一下,从中可以看出,不仅可以让标签有接收触摸事件能力,还出现了不透明的效果(类似于高亮的效果)

  1. var textInputTest = React.createClass({
  2. render(){
  3. return(
  4. <View style={styles.container}>
  5. {/* 包装View */}
  6. <TouchableOpacity
  7. onPress={() => {alert('点击了View')}}
  8. >
  9. <View style={styles.testViewStyle}></View>
  10. </TouchableOpacity>
  11. {/* 包装Text */}
  12. <TouchableOpacity
  13. onPress={() => {alert('点击了Text')}}
  14. >
  15. <Text style={styles.testTextStyle}></Text>
  16. </TouchableOpacity>
  17. </View>
  18. );
  19. }
  20. });

 

 

二  Touchable 常用属性介绍

  1.Touchable 中包含两种触摸类别:

      ①TouchableHighlight(高亮触摸)

            当手指点下的时候,该视图的不透明度会进行降低同时会看到相应的颜色(原理:在底层新添加一个View),需要注意的是TouchableHighlight只能进行一层嵌套,不能多层嵌套,如果需要多层嵌套就要用View包装

  • TouchableWithoutFeedback:这个属性说明了这个组件继承了所有TouchableWithoutFeedback的属性
  • disabled:如果为true,则禁止此组件的一切交互
  • hitSlop {top: number, left: number, bottom: number, right: number}:这一属性定义了按钮的外延范围。这一范围也会使pressRetentionOffset(见下文)变得更大。 注意:触摸范围不会超过父视图的边界,也不会影响原先和本组件层叠的视图(保留原先的触摸优先级)
  • onLayout{nativeEvent: {layout: {x, y, width, height}}}:当加载或者布局改变的时候被调用
  • onLongPress:长按
  • onPress:点击
  • onPressIn:按住
  • onPressOut:抬起
  • pressRetentionOffset {top: number, left: number, bottom: number, right: number}:在当前视图不能滚动的前提下指定这个属性,可以决定当手指移开多远距离之后,会不再激活按钮。但如果手指再次移回范围内,按钮会被再次激活。只要视图不能滚动,你可以来回多次这样的操作。确保你传入一个常量来减少内存分配
  • underlayColor:当触摸或者点击控件的时候显示出的颜色
  • style:可以设置控件的风格演示,该风格演示可以参考View组件的style
  • onShowUnderlay:当底层显示的时候调用
  • onHideUnderlay:当底层被隐藏的时候调用
  • activeOpacity:设置组件在进行触摸时候,显示的不透明度(取值:0 ~ 1)                                                 

     ②TouchableOpacity(不透明触摸)

      该组件封装了响应触摸事件,当点击按下的时候,该组件的透明度会降低

  • activeOpacity:设置当用户触摸的时候,组件的透明度(取值:0 ~ 1)
  • TouchableWithoutFeedback:这个属性说明了这个组件继承了所有TouchableWithoutFeedback的属性
  • disabled:如果为true,则禁止此组件的一切交互
  • hitSlop {top: number, left: number, bottom: number, right: number}:这一属性定义了按钮的外延范围。这一范围也会使pressRetentionOffset(见下文)变得更大。 注意:触摸范围不会超过父视图的边界,也不会影响原先和本组件层叠的视图(保留原先的触摸优先级)
  • onLayout{nativeEvent: {layout: {x, y, width, height}}}:当加载或者布局改变的时候被调用
  • onLongPress:长按
  • onPress:点击
  • onPressIn:按住
  • onPressOut:抬起
  • pressRetentionOffset {top: number, left: number, bottom: number, right: number}:在当前视图不能滚动的前提下指定这个属性,可以决定当手指移开多远距离之后,会不再激活按钮。但如果手指再次移回范围内,按钮会被再次激活。只要视图不能滚动,你可以来回多次这样的操作。确保你传入一个常量来减少内存分配

2.常见的触摸事件演示


       ①.TouchableHighlight(高亮触摸)

  1. var textInputTest = React.createClass({
  2. render(){
  3. return(
  4. <View style={styles.container}>
  5. {/* 点击 */}
  6. <TouchableHighlight
  7. onPress={() => {alert('点击')}}
  8. underlayColor={'red'}
  9. >
  10. <View style={styles.testViewStyle}></View>
  11. </TouchableHighlight>
  12. {/* 按下 */}
  13. <TouchableHighlight
  14. onPressIn={() => {alert('按下')}}
  15. underlayColor={'orange'}
  16. >
  17. <View style={styles.testViewStyle}></View>
  18. </TouchableHighlight>
  19. {/* 抬起 */}
  20. <TouchableHighlight
  21. onPressOut={() => {alert('抬起')}}
  22. underlayColor={'blue'}
  23. >
  24. <View style={styles.testViewStyle}></View>
  25. </TouchableHighlight>
  26. {/* 长按 */}
  27. <TouchableHighlight
  28. onLongPress={() => {alert('长按')}}
  29. underlayColor={'yellow'}
  30. >
  31. <View style={styles.testViewStyle}></View>
  32. </TouchableHighlight>
  33. </View>
  34. );
  35. }
  36. });

效果:

     ②TouchableOpacity(不透明触摸)

 

  1. var textInputTest = React.createClass({
  2. render(){
  3. return(
  4. <View style={styles.container}>
  5. {/* 点击 */}
  6. <TouchableOpacity
  7. onPress={() => {alert('点击')}}
  8. >
  9. <View style={styles.testViewStyle}></View>
  10. </TouchableOpacity>
  11. {/* 按下 */}
  12. <TouchableOpacity
  13. onPressIn={() => {alert('按下')}}
  14. >
  15. <View style={styles.testViewStyle}></View>
  16. </TouchableOpacity>
  17. {/* 抬起 */}
  18. <TouchableOpacity
  19. onPressOut={() => {alert('抬起')}}
  20. >
  21. <View style={styles.testViewStyle}></View>
  22. </TouchableOpacity>
  23. {/* 长按 */}
  24. <TouchableOpacity
  25. onLongPress={() => {alert('长按')}}
  26. >
  27. <View style={styles.testViewStyle}></View>
  28. </TouchableOpacity>
  29. </View>
  30. );
  31. }
  32. });

效果:


 


链接:https://www.jianshu.com/p/a840d2e9a312

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/781240
推荐阅读
相关标签
  

闽ICP备14008679号