React Native之Touchable四组件

一、TouchableHighlight

概念:

本组件用于封装视图,使其可以正确响应触摸操作。当按下的时候,封装的视图的不透明度会降低,同时会有一个底层的颜色透过而被用户看到,使得视图变暗或变亮。

在底层实现上,实际会创建一个新的视图到视图层级中,如果使用的方法不正确,有时候会导致一些不希望出现的视觉效果。譬如没有给视图的backgroundColor显式声明一个不透明的颜色。

注意:TouchableHighlight只支持一个子节点,如果你希望包含多个子组件,用一个View来包装它们。

renderButton: function() {
  return (
    <TouchableHighlight onPress={this._onPressButton}>
      <Image
        style={styles.button}
        source={require(‘./button.png‘)}
      />
    </TouchableHighlight>
  );
},

属性:继承了所有TouchableWithoutFeedback的属性。

  1. activeOpacity   Number    指定封装的视图在被触摸操作激活时以多少不透明度显示(通常在0到1之间)。
  2. onHideUnderlay     Function  当底层的颜色被隐藏的时候调用。

  3. onShowUnderlay    Function  当底层的颜色被显示的时候调用。

  4. style

  5. underlayColor    String   触摸操作时的底层颜色

二、TouchableNativeFeedback

概念:

本组件用于封装视图,使其可以正确响应触摸操作(仅限Android平台)。在Android设备上,这个组件利用原生状态来渲染触摸的反馈。目前它只支持一个单独的View实例作为子节点。在底层实现上,实际会创建一个新的RCTView节点替换当前的子View,并附带一些额外的属性。原生触摸操作反馈的背景可以使用background属性来自定义。

renderButton: function() {
  return (
    <TouchableNativeFeedback
        onPress={this._onPressButton}
        background={TouchableNativeFeedback.SelectableBackground()}>
      <View style={{width: 150, height: 100, backgroundColor: ‘red‘}}>
        <Text style={{margin: 30}}>Button</Text>
      </View>
    </TouchableNativeFeedback>
  );
},

属性:继承了所有TouchableWithoutFeedback的属性。

1.background    backgroundPropType  决定在触摸反馈的时候显示什么类型的背景。接受一个type属性和一些基于type属性的额外数据的对象。推荐使用以下静态方法之一来创建这个对象:

  • TouchableNativeFeedback.SelectableBackground()  - 会创建一个对象,表示安卓主题默认的对于被选中对象的背景。  

  • TouchableNativeFeedback.SelectableBackgroundBorderless() - 会创建一个对象,表示安卓主题默认的对于被选中的无边框对象的背景。(?android:attr/selectableItemBackgroundBorderless)。只在Android API level 21+适用。
  • TouchableNativeFeedback.Ripple(color, borderless) - 会创建一个对象,当按钮被按下时产生一个涟漪状的背景,你可以通过color参数来指定颜色,如果参数borderless是true,那么涟漪还会渲染到视图的范围之外。(参见原生的actionbar buttons作为该效果的一个例子)。这个背景类型只在Android API level 21+适用。

三、TouchableOpacity

概念:

本组件用于封装视图,使其可以正确响应触摸操作。当按下的时候,封装的视图的不透明度会降低。这个过程并不会真正改变视图层级,大部分情况下很容易添加到应用中而不会带来一些奇怪的副作用。(此组件与TouchableHighlight的区别在于并没有额外的颜色变化,更适于一般场景)

renderButton: function() {
  return (
    <TouchableOpacity onPress={this._onPressButton}>
      <Image
        style={styles.button}
        source={require(‘image!myButton‘)}
      />
    </TouchableOpacity>
  );
},

属性:继承了所有TouchableWithoutFeedback的属性。

  1. activeOpacity   Number    指定封装的视图在被触摸操作激活时以多少不透明度显示(通常在0到1之间)

四、TouchableWithoutFeedback

概念:

除非你有一个很好的理由,否则不要用这个组件。所有能够响应触屏操作的元素在触屏后都应该有一个视觉上的反馈(然而本组件没有任何视觉反馈)。这也是为什么一个"web"应用总是显得不够"原生"的主要原因之一。

注意:TouchableWithoutFeedback只支持一个子节点,如果你希望包含多个子组件,用一个View来包装它们。

属性:

  1.  accessibilityComponentType
  2. accessibilityTraits

  3. accessible

  4. delayLongPress  单位是毫秒,从onPressIn开始,到onLongPress被调用的延迟。

  5. delayPressIn   单位是毫秒,从触摸操作开始到onPressIn被调用的延迟。

  6. delayPressOut  单位是毫秒,从触摸操作结束开始到onPressOut被调用的延迟。

  7. disabled    如果设为true,则禁止此组件的一切交互。

  8. hitSlop {top: number, left: number, bottom: number, right: number}  这一属性定义了按钮的外延范围。这一范围也会使pressRetentionOffset(见下文)变得更大。 注意:触摸范围不会超过父视图的边界,也不会影响原先和本组件层叠的视图(保留原先的触摸优先级)。

  9. onLayout   当加载或者布局改变的时候被调用,参数为:

    {nativeEvent: {layout: {x, y, width, height}}}

  10. onLongPress

  11. onPress   当触摸操作结束时调用,但如果被取消了则不调用(譬如响应者被一个滚动操作取代)

  12. onPressIn

  13. onPressOut

  14. pressRetentionOffset {top: number, left: number, bottom: number, right: number}  在当前视图不能滚动的前提下指定这个属性,可以决定当手指移开多远距离之后,会不再激活按钮。但如果手指再次移回范围内,按钮会被再次激活。只要视图不能滚动,你可以来回多次这样的操作。确保你传入一个常量来减少内存分配。

时间: 2024-10-27 08:16:58

React Native之Touchable四组件的相关文章

推荐 11 款 React Native 开源移动 UI 组件

推荐 11 款 React Native 开源移动 UI 组件 oschina 发布于 10个月前,共有 14 条评论 本文推荐 11 个非常棒的 React Native 开源组件,希望能给移动应用开发者提供帮助. React Native 是近期 Facebook 基于 MIT 协议开源的原生移动应用开发框架,已经用于 Facebook 的生产环境.React Native 可以使用最近非常流行的 React.js 库来开发 iOS 和 Android 原生 APP. 1. iOS 表单处理

React Native学习(四)—— 写一个公用组件(头部)

本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-Demo 一.总览 头部通常分为左.中.右三部分,效果图如下: 二.头部组件 1.创建components文件夹,新建commonHead.js 2.commonHead.js 头部分为左.中.右三块,我们需要提供接口,获取外部传入的值,从而判断哪一块需要创建. static propTypes =

React Native中Touchable组件的使用

截图如下: /** * Sample React Native App * https://github.com/facebook/react-native * @flow */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, TouchableOpacity, AlertIOS, } from 'react-native'; // ES5写法 var ViewDemo

React Native知识5-Touchable类组件

React Native 没有像web那样可以给元素绑定click事件,前面我们已经知道Text组件有onPress事件,为了给其他组件 也绑定点击事件,React Native提供了3个组件来做这件事. 1.TouchableHighlight:高亮触摸,用户点击时,会产生高亮效果. 2.TouchableOpacity:透明触摸.用户点击时,点击的组件会出现透明效果. 3.TouchableWithoutFeedback:无反馈性触摸.用户点击时无任何视觉效果. 注意:只支持一个子节点,如果

React Native 调用原生Android组件

在如今的App中,已经有成千上万的原生UI部件了--其中的一些是平台的一部分,另一些可能来自于一些第三方库,而且可能你自己还收藏了很多.React Native已经封装了大部分最常见的组件,譬如ScrollView和TextInput,但不可能封装全部组件.而且,说不定你曾经为自己以前的App还封装过一些组件,React Native肯定没法包含它们.幸运的是,在React Naitve应用程序中封装和植入已有的组件非常简单. 比如WebView,官方并没有提供Android端的实现,那么我们现

Android React Native使用原生UI组件

Android React Native 已经将几个常用的原生组件进行了封装,比如 ScrollView 和 TextInput,但是并不是所有系统的原始组件都被封装了,因此有的时候我们不得不自己动手封装一下,从而能够使用那些React Native没有为我们封装的原生组件,比如WebView,官方并没有提供Android端的实现,那么我们现在就动手封装一下WebView. 之前写过一篇文章Android React Native使用原生模块,而使用原生UI组件的方法和使用原生模块的方法十分类似

react native 基础按钮的组件

/** * Created by zmis2 on 2016/11/18. */import React,{Component} from 'react';import { Text, View, StyleSheet, TouchableOpacity,} from 'react-native'; export default class Button extends Component { //构造 constructor(props) { super(props); //初始状态 this

React Native 之 定义的组件 (跨文件使用)

哈哈的~~~今天介绍的是自定义组件 然后去使用这个组件,让这个组件传递这各种文件之间  哈哈  下面开始吧!!!! 我们所要创建的是一个自定义的Button,先创建一个js文件起名为MyButton, 且触摸后的底色.触发事件响应的函数. 图片资源.以及图片大小都是根据传过来的值确定的.(所传递进来的参数决定) ok!!下面我们需要在MyButton.js 这个文件中添加一些原生的控件(组件) import React, { AppRegistry, Component, Image, Touc

8、手把手教React Native实战之ReactJS组件生命周期

1.创建阶段 getDefaultProps:处理props的默认值 在React.createClass调用 2.实例化阶段 React.render(<HelloMessage 启动之后 getInitialState.componentWillMount.render.componentDidMount state:组件的属性,主要是用来存储组件自身需要的数据,每次数据的更新都是通过修改state属性的值,ReactJS内部会监听state属性的变化,一旦发生变化的话,就会主动触发组件的r