react native 触摸Touchable***的区别(TouchableWithoutFeedback、TouchableOpacity、TouchableHighlight、TouchableNativeFeedback)
一、问题背景:
react native的跨平台开发没有button的概念,而是使用touchable系列实现点击触发效果。
而touchable系列就有四个之多,而且相互之间仍有较大差别,这就给我们造成很大的困扰,今天就来分析一下这类在react native中必不可少的组件。
二、分析描述
(一)、归类分析
一共有四个touchable相关的点击触发按钮,分别是:
- TouchableWithoutFeedback
- TouchableOpacity
- TouchableHighlight
- TouchableNativeFeedback
我们可以分成3类来描述:
- 第一类:TouchableWithoutFeedback: 触摸后在视觉上没有任何点击效果反馈
- 第二类:包括:TouchableHighlight 和 TouchableOpacity 两者都继承之TouchableWithoutFeedback
- TouchableHighlight : 实现高亮的触摸反馈
- TouchableOpacity : 实现透明度的触摸反馈
- 第三类:TouchableNativeFeedback: 可以在Android 5.0以后触摸实现水波纹的效果,(因此仅限Android平台,iOS平台使用会报错)
(二)、详细描述
TouchableWithoutFeedback:
Touchable系列组件中最基本的一个组价,只响应用户的点击事件不会做任何UI上的改变,在使用的过程中需要特别留意。
注意:该标签不可以添加style样式属性,加了也没效果
相关属性:
- onPress function 当触摸操作结束时调用,但如果被取消了则不调用(譬如响应者被一个滚动操作取代)
- onLongPress function 当用户长时间按压组件(长按效果)的时候调用该方法。
- disabled bool 如果设为true,则禁止此组件的一切交互。
- onPressIn function与onPressOut function 分别是当用户开始点击按钮时与点击结束后被回调。
<TouchableWithoutFeedback
onPress={()=> {alert('触摸效果')}}
onLongPress={()=> {alert('长按效果')}}
disabled={false} //默认是false,如果是true表示关闭该组件的触摸功能
onPressIn={()=> {alert('触摸开始')}}
onPressOut={()=>{alert('触摸结束')}}
>
<View><Text>TouchableWithoutFeedback的测试</Text></View>
</TouchableWithoutFeedback>
TouchableHighlight:
Touchable系列组件中比较常用的一个,它是在TouchableWithoutFeedback的基础上添加了一些UI上的扩展,既当手指按下的时候,该视图的不透明度会降低,同时会看到相应的颜色(视图变暗或者变亮)
注意:该标签可以添加style样式属性,因为有一层<View>可以使用
其实就是在TouchableHighlight 的外层套了一层<View>通过改变view组件的颜色和透明度来实现点击效果的改变
相关属性:
- activeOpacity number 用于设置被按下时按钮的不透明度,默认是0.85
- underlayColor color 用于设置被按下时按钮的颜色,默认是black
- onShowUnderlay function 最外层的View显示的时候调用
- onHideUnderlay function 最外层的View被隐藏的时候调用
- style View#style 最外层的View可以设置样式
- onPress function 当触摸操作结束时调用,但如果被取消了则不调用(譬如响应者被一个滚动操作取代)
- onLongPress function 当用户长时间按压组件(长按效果)的时候调用该方法。
- disabled bool 如果设为true,则禁止此组件的一切交互。
- onPressIn function与onPressOut function 分别是当用户开始点击按钮时与点击结束后被回调。
<TouchableHighlight
style={{}}
activeOpacity={0.6}
underlayColor='red'
onHideUnderlay={()=>{alert('衬底被隐藏')}}
onShowUnderlay={()=>{alert('衬底显示')}}
>
<View><Text>TouchableHighlight的测试</Text></View>
</TouchableHighlight>
TouchableOpacity:(完全同TouchableHighlight,只是不可以修改颜色,只能修改透明度,可以添加样式效果)
TouchableOpacity也是Touchable系列组件中比较常用的一个,它是在TouchableWithoutFeedback的基础上添加了一些UI上的扩展,但这些扩展相比TouchableHighlight 少了一个额外的颜色变化。它是通过在按下去改变视图的不透明度来表示按钮被点击的。
TouchableNativeFeedback:(仅限Android平台,且5.0以上)
为了支持Android5.0新增的触控反馈,React Native加入了TouchableNativeFeedback 组件,TouchableNativeFeedback 在TouchableWithoutFeedback 所支持的属性的基础上增加了按下去的水波纹效果。我们可以通过background 属性来自定义原生触摸操作反馈的背景
(三)、补充提示
提示一:无论是TouchableWithoutFeedback还是其他三种Touchable组件,都是在根节点都是只支持一个组件,如果你需要多个组件同时响应单击事件,可以用一个View将它们包裹着,它的这种根节点只支持一个组件的特性和ScrollView很类似。
//错误示范:其他的Touchable系列同样
<TouchableHighlight
style={{}}
onPress={() => {alert('123')}}
>
<View><Text>TouchableHighlight的测试</Text></View>
<View><Text>这是错误的,TouchableHighlight中只能有一个总节点包裹</Text></View>
</TouchableHighlight> //正确
<TouchableHighlight
style={{}}
onPress={() => {alert('123')}}
>
<View>
<View><Text>TouchableHighlight的测试</Text></View>
<View><Text>这是错误的,TouchableHighlight中只能有一个总节点包裹</Text></View>
</View>
</TouchableHighlight>
提示二: <Text>组件也有点击功能 可通过onPress实现触摸回调
//Text也可以实现点击功能
<Text
style={{}}
onPress={()} => {alert('Text组件的点击功能')}
>Text的点击功能
</Text>
三、结束
react native 触摸Touchable***的区别(TouchableWithoutFeedback、TouchableOpacity、TouchableHighlight、TouchableNativeFeedback)的更多相关文章
- React Native 之 Touchable 介绍与使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- React Native中Touchable组件的使用
截图如下: /** * Sample React Native App * https://github.com/facebook/react-native * @flow */ import Rea ...
- react native touchable
<Button style={{marginTop: 30}} onPress={() => { Alert.alert("你点击了按钮!"); }} onPressI ...
- React Native组件(二)View组件解析
相关文章 React Native探索系列 React Native组件系列 前言 了解了RN的组件的生命周期后,我们接着来学习RN的具体的组件.View组件是最基本的组件,也是首先要掌握的组件,这一 ...
- React Native 网络请求
如下面的Code,分别介绍了GET,POST,以及使用XMLHttpRequest的Get请求. import React, { Component } from 'react'; import { ...
- React Native交互组件之Touchable
React Native交互组件之Touchable:只要在组件外面包一个Touchable组件就可以实现点击交互. TouchableHighlight:高亮触摸 当点击时,组件的透明度会改变,可以 ...
- 一起来点React Native——常用组件之Touchable系列
在前面的登录界面中,我们发现所有的组件不会对用户的点击.触摸.拖拽做出合适的响应,这是十分不友好的.那么,在React Native中如何让视图对触发做出合适的响应呢? 一.高亮触摸 Touchab ...
- 从零学React Native之09可触摸组件
可触摸组件有: TouchableHighlight,TouchableNativeFeedback,TouchableOpacity,TouchableWithoutFeedback 1. Touc ...
- 移动端学习之理解WEB APP、Native APP、Hybrid APP以及React Native/uniapp包括H5、小程序等的区别与共通之处
因为工作需要,需要进一步了解移动端的开发,遂返回复习移动端的知识点,在开始学习之前,产生了疑惑WEB APP .Native APP .Hybrid APP.React Native.Uniapp.H ...
随机推荐
- node 使用范围 和 node的优势 (为什么 创业公司 选择的不是 java php ruby 等)
链接 一些国外大公司 范围: 第一: 希望合并后台多个接口 成为一个接口, 或者频繁改动接口 相关, 比如数据 和数据格式之类, 后台难以配合, 这里可以使用node作为后台的应用层调用其他接口 ...
- react中map循环中key取值问题
数组中没有唯一的key,可以定义变量,拼接字符串连接. let i = 0; key={`infoItem-col-${i++}`}
- Unix网络编程第三版源码编译
配置: $ cd Unix-Network-Programming/ $ chmod 755 configure $ ./configure 主要的工作是检查系统是否有源码编译所依赖的各种资源(系统版 ...
- js:关闭当前页面
var userAgent = navigator.userAgent; if (userAgent.indexOf("Firefox") != -1 || userAgent.i ...
- # 20155214 2016-2017-2 《Java程序设计》第6周学习总结
20155214 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 1.在Java中,输入/输出串流代表对象为java.io.InputStream,java. ...
- 十四年风雨路 苹果iMac电脑进化论
1998年起,在CEO乔布斯的带领下,苹果先后创造除了“软糖”iMac G3.“台灯”iMac G4和“像框”G5.iMac凭借其漂亮的外形和强大的性能,迅速赢得了消费者们的喜爱,甚至改变了整个人类社 ...
- [CF1016G]Appropriate Team
codeforces description 给你一个数组\(\{a_i\}\)以及\(X,Y\),问你有多少对\((i,j)\)满足存在一个\(v\in \mathbb{N}^+\)使得 \(\gc ...
- office 2013 图标编辑
1,找图标,网站:https://www.iconfinder.com/ 2,找到图标后用qq截图,之后粘贴到Adobe Illustrator 里边. 3,选定图像后,点击对象->图像描摹-& ...
- 微信跳一跳,Python辅助自动跳程序
一.说明 此代码借鉴一位大神提供在gitHub上的源码,已经做了简化合并处理,成功连上手机并运行后,可实现自动玩微信跳一跳游戏,刷个1000+的分数轻轻松松 github源码地址 https://gi ...
- 差分进化算法-python实现
DEIndividual.py import numpy as np import ObjFunction class DEIndividual: ''' individual of differen ...