TouchableNativeFeedback、TouchableHighlight、またはTouchableOpacityを使用する場合


94

ネイティブ反応して、そこにボタンを作成するには、少なくとも3つの方法がある:TouchableNativeFeedbackTouchableHighlightTouchableOpacity。またTouchableWithoutFeedback、「プレスに反応するすべての要素は、触れたときに視覚的なフィードバックが必要である」ため、ドキュメントには使用すべきではないと明確に記載されているものもあります。

3つの間に他に重要な違いはありますか?それらの1つはgotoコンポーネントですか?どのような場合に使用TouchableHighlightする必要がありますTouchableOpacityか?パフォーマンスへの影響はありますか?

私は今アプリケーションを書いていますが、3つすべてがタップとアクション(この場合はナビゲーションの変更)の間にかなりの遅延があることがわかりました。それをよりきびきびとさせる方法はありますか?


4
スナップ性に関する限り... console.logに何かを出力すると、シーンの遷移が大幅に遅くなります。私はreactNativeを始めたばかりで、最初のコンポーネントの開発中の速度には少し感心しませんでした。すべてのconsole.logコマンド(reduxロガーの無効化を含む)を削除し、リリースターゲット用にビルドしたところ、速度が驚かされました。これは、Cordovaアプリの開発によるものです。
トラビスホワイト

回答:


115

出典:https://medium.com/differential/better-cross-platform-react-native-components-cb8aadeba472、Nick Wientge

TouchableHighlight

•機能:押すと、要素の背景を暗くしたり明るくしたりします。

•いつ使用するか:iOSの場合、ソリッドな形状または背景を持つタッチ可能な要素またはボタンの場合、およびListViewアイテムの場合。

TouchableOpacity

•機能:押すと要素全体の不透明度が明るくなります。

•いつ使用するか:iOSの場合、背景色のないスタンドアロンのテキストまたはアイコンであるタッチ可能な要素。

TouchableNativeFeedback

•機能:押すと背景に波及効果を追加します。

•いつ使用するか:Androidでは、ほとんどすべてのタッチ可能な要素に対応します。


ありがとうございました!それ以来、この記事を読んでいましたが、自分の質問に答えることができなくなりました。それはまさに私が探していたものです。
damusnet 2017

1
TouchableNativeFeedbackを使用する場合、背景は正方形になります(波紋を意味するわけではありません)。どのようにカスタマイズしますか(サイズを大きくする、丸くする、または削除して波紋だけにするなど)。
Yasir 2017年

8

さて、これは私が通常何を使用するかを決定する方法です:

  • Android専用でビルドしていて、コンポーネントが十分に大きいため、ネイティブフィードバックが他のフィードバックとは明らかに異なる場合は、次を使用します。 TouchableNativeFeedback
  • コンポーネントの不透明度を制御したい場合、またはボタンに触れたときに色を付けたい場合、およびTouchable内の一部の要素のフォーカス状態を制御したくない場合は、を使用しますTouchableHighlight。(TouchableOpacity不透明度を自分で制御すると、奇妙な部分がいくつかあります)。
  • 他のすべての場合、私はTouchableOpacityそれがより「裸」であるために使用しますTouchableHighlight

1
この答えは有益なスタートです…しかし、私は、どちらかを使用する理由について、より確かな技術的および/または設計関連の理由を見つけることを望んでいました。
ボー・スミス

2

ドキュメントに記載されている主な本質的な違いは次のとおりです。

TouchableHighlight must have one child (not zero or more than one). If you wish to have several child components, wrap them in a View.リンク

TouchableHighlight

TouchableHighlightビューをタッチに適切に応答させるためのラッパー。押し下げると、ラップされたビューの不透明度が低下し、アンダーレイの色が透けて見え、ビューが暗くなったり、色が濃くなったりします。

アンダーレイは、子を新しいビューでラップすることで発生します。これは、レイアウトに影響を与える可能性があり、ラップされたビューのbackgroundColorが明示的に不透明な色に設定されていない場合など、正しく使用されない場合、不要な視覚的アーティファクトを引き起こすことがあります。

TouchableOpacity

TouchableOpacity#ビューをタッチに適切に応答させるためのラッパー。押し下げると、ラップされたビューの不透明度が下がり、暗くなります。


-3

あなたがしたい場合は

  • プレス時にハイライトボタン—使用 TouchableHighlight
  • 押すとボタンの不透明度を変更—使用 TouchableOpacity

3
著者はこれを知っていると思いますaはもっと複雑な答えを求めています。
Radek Czemerys 2016

1
さらに、使用することもでき<TouchableHighlight underlayColor="transparent" />ます...そしてFacebookはF8アプリでそれらすべてをミックスしますgithub.com/fbsamples/f8app/blob/master/js/common/F8Touchable.js
damusnet
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.