Code Monkey home page Code Monkey logo

react-native-platform-touchable's Introduction

react-native-platform-touchable is no longer maintained

๐Ÿšจ We recommend using react-native-gesture-handler buttons instead!


#<Touchable>

A wrapper around the various Touchable* components built into React Native core in order to use TouchableNativeFeedback whenever possible, provide an easier interface to using it, and flatten out API differences between the Touchable components.

  • iOS: Defaults to TouchableOpacity with default activeOpacity.

  • Android: Defaults to TouchableNativeFeedback with background from Android app style, unless Android API <= 20 / Android < 5.0, then defaults to TouchableOpacity.

  • Touchable requires exactly one child, for example:

    // Good
    <Touchable>
      <Child>
        <GrandChild />
        <GrandChild />
      </Child>
    </Touchable>
    
    // Bad
    <Touchable>
      <Child />
      <Child />
    </Touchable>

Usage

npm i react-native-platform-touchable --save

 # or

yarn add react-native-platform-touchable
import React from 'react';
import { Text, View } from 'react-native';
import Touchable from 'react-native-platform-touchable';

export default class App extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Touchable
          onPress={() => console.log('hello!')}
          style={{
            backgroundColor: '#eee',
            paddingVertical: 30,
            paddingHorizontal: 80,
          }}
          background={Touchable.Ripple('blue')}>
          <Text>Hello there!</Text>
        </Touchable>
      </View>
    );
  }
}

Statics

  • Touchable.SelectableBackground() - creates an object that represents android theme's default background for selectable elements
  • Touchable.SelectableBackgroundBorderless() - creates an object that represent android theme's default background for borderless selectable elements.
  • Touchable.Ripple(color: string, borderless: boolean) - creates an object that represents ripple drawable with specified color (as a string). If property borderless evaluates to true the ripple will render outside of the view bounds.

props

You can use the same props as you would use on TouchableOpacity, TouchableHighlight, TouchableNativeFeedback, and TouchableWithoutFeedback. Listed below.

  • fallback - If TouchableNativeFeedback is not available (on iOS and on Android API <= 20 / Android < 5.0), the component specified in this prop is used instead. Defaults to TouchableOpacity.

  • hitSlop - use this! pass in an object of the format { top: number, left: number, right: number, bottom: number }, this makes the Touchable easier to press by expanding the touchable area by the number of points that you specify on each side, without having to change the layout of the Touchable, eg: by adding padding.

  • onPress - fired when you press (touch in, release within bounds).

  • onPressIn - fired immediately on press in (like onmousedown on web)

  • onPressOut - fired immediately on press out (like onmouseout on web)

  • onLongPress - fired when you press and hold.

  • delayLongPress - time to wait for onLongPress to fire.

  • delayPressIn - time to wait for onPressIn to fire

  • delayPressOut - time to wait for onPressOut to fire

  • disabled - default false, when true the button is disabled.

  • onLayout - see onLayout documentation on View

  • pressRetentionOffset - see React Native documentation.

  • accessibility props - see TouchableWithoutFeedback for the list of supported props and Accessibility guide for more information.

Additional props used by TouchableOpacity (default iOS)

  • activeOpacity - sets the opacity to animate to when touch is active.

Additional props used by TouchableNativeFeedback (default Android)

  • background - customize the touch effect with Touchable.SelectableBackground, Touchable.SelectableBackgroundBorderless, or Touchable.Ripple(color: string, borderless: boolean).
  • foreground - same as background, should be used instead of background if the Touchable has any images as children and you want the ripple to be rendered above the image (if the image is not opaque, background will not be visible, you must use foreground)

Additional props used by TouchableHighlight

  • underlayColor - the color of the background when touch is active.
  • onHideUnderlay - fired immediately after the underlay is hidden
  • onShowUnderlay - fired immediately after the underlay is shown

Rounded corners on Touchables with TouchableNativeFeedback behavior

react-native-platform-touchable's People

Contributors

bramus avatar brentvatne avatar seanyusa avatar vonovak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-native-platform-touchable's Issues

Question regarding children constraint

We all know that TouchableNativeFeedback only support one single child. But, why don't handle it and wrap the children into a View?

render () {
  // changing some pieces of your render

  // notice the `toArray`
  children = React.Children.toArray(children);

  // notice the View wrapping the children
  return <TouchableComponent>
    <View>{children}</View>
  </TouchableComponent>
}

Just wondering why don't do this approach :)

react-native-web support [Potential PR]

Feature Request

support for react-native-web out of the box.

Although It can be made working in react-native-web projects just by transpiling . something like :

rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules\/(?!react-native-platform-touchable|epic-components).+/,
        include: [
          path.resolve(__dirname, "./src"),
          path.resolve(modulePath, "react-native-platform-touchable"),
          path.resolve(modulePath, "epic-components")
        ],
      .......

but it would be nice if we have this pre-transformed on publish via bob/webpack . I am happy to make a PR .

Code sample

  "prepare": "bob build"

Would be possible to use it with styled-components?

I'm trying to use something like this in my styles.js file:

import Touchable from 'react-native-platform-touchable';

export const Button = styled(Touchable)`
  padding: 20px;
  color: #000;
  background-color: #fff;
`;

But it doesn't work. Is there a way to make it work without importing the Touchable directly in my component file?

Android error on flatlist item that has Touchable

I have a flatlist with an item like this:

  <Touchable onPress={() => this.props.onPress()} background={Touchable.SelectableBackground()}>

It usually works, but sometimes I get this error:

Attempted to transition from state RESPONDER_INACTIVE_PRESS_IN to RESPONDER_ACTIVE_LONG_PRESS_IN, which is not supported. This is most likely due to Touchable.longPressDelayTimeout not being cancelled.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.