1. 程式人生 > >《React-Native系列》15、 RN之可觸控元件

《React-Native系列》15、 RN之可觸控元件

今天,我們來看下ReactNative提供的可觸控元件。

分別為:TouchableHighlight、TouchableNativeFeedback、TouchableOpacity、TouchableWithoutFeedback。

TouchableWithoutFeedback控制元件是觸控點選不帶反饋效果的,另外三個都是有反饋效果。這三個元件都繼承了所有TouchableWithoutFeedback的屬性。

1、TouchableWithoutFeedback

官網解釋:

除非你有一個很好的理由,否則不要用這個元件。所有能夠響應觸屏操作的元素在觸屏後都應該有一個視覺上的反饋(然而本元件沒有任何視覺反饋)。這也是為什麼一個"web"應用總是顯得不夠"原生"的主要原因之一。

注意:TouchableWithoutFeedback只支援一個子節點,如果你希望包含多個子元件,用一個View來包裝它們。


屬性
accessible bool 

delayLongPress number 
單位是毫秒,從onPressIn開始,到onLongPress被呼叫的延遲。

delayPressIn number 
單位是毫秒,從觸控操作開始到onPressIn被呼叫的延遲。

delayPressOut number 
單位是毫秒,從觸控操作結束開始到onPressOut被呼叫的延遲。

disabled bool 
如果設為true,則禁止此元件的一切互動。

hitSlop {top: number, left: number, bottom: number, right: number} 
這一屬性定義了按鈕的外延範圍。這一範圍也會使pressRetentionOffset(見下文)變得更大。 注意:觸控範圍不會超過父檢視的邊界,也不會影響原先和本元件層疊的檢視(保留原先的觸控優先順序)。

onLayout function 
當載入或者佈局改變的時候被呼叫,引數為:{nativeEvent: {layout: {x, y, width, height}}}

onLongPress function 

onPress function 
當觸控操作結束時呼叫,但如果被取消了則不呼叫(譬如響應者被一個滾動操作取代)

onPressIn function 


onPressOut function 

pressRetentionOffset {top: number, left: number, bottom: number, right: number} 
在當前檢視不能滾動的前提下指定這個屬性,可以決定當手指移開多遠距離之後,會不再啟用按鈕。但如果手指再次移回範圍內,按鈕會被再次啟用。只要檢視不能滾動,你可以來回多次這樣的操作。確保你傳入一個常量來減少記憶體分配。

<TouchableWithoutFeedback onPress={()=>{console.log('I am onPressed!')})>
    <View style={styles.xxx}>
    </View>
<TouchableWithoutFeedback/>

除非說有特殊的場景需求,儘量還是不要用這個元件。

2、TouchableHighlight

官網的解釋:

本元件用於封裝檢視,使其可以正確響應觸控操作。當按下的時候,封裝的檢視的不透明度會降低,同時會有一個底層的顏色透過而被使用者看到,使得檢視變暗或變亮。在底層實現上,實際會建立一個新的檢視到檢視層級中,如果使用的方法不正確,有時候會導致一些不希望出現的視覺效果。譬如沒有給檢視的backgroundColor顯式宣告一個不透明的顏色。

注意:TouchableHighlight只支援一個子節點,如果你希望包含多個子元件,用一個View來包裝它們。


屬性
TouchableWithoutFeedback props... 
譯註:這意味著本元件繼承了所有TouchableWithoutFeedback的屬性。

activeOpacity number 
指定封裝的檢視在被觸控操作啟用時以多少不透明度顯示(通常在0到1之間)。

onHideUnderlay function 
當底層的顏色被隱藏的時候呼叫。

onShowUnderlay function 
當底層的顏色被顯示的時候呼叫。

style View#style 

underlayColor string 
有觸控操作時顯示出來的底層的顏色。

示例:

<TouchableHighlight underlayColor='#f0f0f0' onPress={this.openIM.bind(this)} style={styles.userIMImageView}>
      <Image source={{uri:'im'}} style={styles.userIMImage}/>
</TouchableHighlight>
這個很簡單的例子,就是一個圖片,點選後背景色變為:#f0f0f0

3、TouchableOpacity

官網解釋:

本元件用於封裝檢視,使其可以正確響應觸控操作。當按下的時候,封裝的檢視的不透明度會降低。這個過程並不會真正改變檢視層級,大部分情況下很容易新增到應用中而不會帶來一些奇怪的副作用。(譯註:此元件與TouchableHighlight的區別在於並沒有額外的顏色變化,更適於一般場景)。

屬性
TouchableWithoutFeedback props... 
譯註:這意味著本元件繼承了所有TouchableWithoutFeedback的屬性。

activeOpacity number 
指定封裝的檢視在被觸控操作啟用時以多少不透明度顯示(通常在0到1之間)。

示例:

<TouchableOpacity
    style={styles.saveView}
    onPress={this.refuse.bind(this)}
    activeOpacity={0.7}
>
    <Text style={styles.saveText}>
       拒單
    </Text>
</TouchableOpacity>
上面這邊程式碼實現的效果是:按鈕點選後,不透明度為0.7

1、將TouchableOpacity元件當成一個View元件,子元件為Text,封裝成一個Button
2、當按鈕被點選時,不透明度activeOpacity設定為0.7

需要注意的是TouchableHighlight和TouchableHighlight只有設定onPress方法後,對應的背景色和透明度才有效。

4、TouchableNativeFeedback

官網解釋:

本元件用於封裝檢視,使其可以正確響應觸控操作(僅限Android平臺)。在Android裝置上,這個元件利用原生狀態來渲染觸控的反饋。目前它只支援一個單獨的View例項作為子節點。在底層實現上,實際會建立一個新的RCTView結點替換當前的子View,並附帶一些額外的屬性。
原生觸控操作反饋的背景可以使用background屬性來自定義。

由於不支援跨平臺,建議先不要使用這個元件。這裡就先不說了。

參考:http://reactnative.cn/docs/0.31/touchablewithoutfeedback.html#content

相關推薦

React-Native系列15 RN觸控元件

今天,我們來看下ReactNative提供的可觸控元件。 分別為:TouchableHighlight、TouchableNativeFeedback、TouchableOpacity、TouchableWithoutFeedback。 TouchableWithoutFe

React-Native系列》3RNnative交互CallbackPromise

pan resolv str string callback 多次調用 modules 函數 等待 接著上一篇《React-Native系列》RN與native交互與數據傳遞,我們接下來研究另外的兩種RN與Native交互的機制 一、Callback機制 首先Calllba

REACT NATIVE 系列教程十一】外掛的安裝使用與更新(示例:REACT-NATIVE-TAB-NAVIGATOR)

本篇主要來詳細介紹如何安裝、升級外掛及講解一個react-native-tab-navigator的示例。本文舉例使用的外掛:react-native-tab-navigator ,選項卡形式的導航1. 通過  https://www.npmjs.com 找到我們想使用的外掛, 搜尋:react-native

React-Native系列》21 解決RN在Android下不支援gif問題

由於RN在Android平臺上不支援gif格式的圖片,今天介紹下我們是怎麼處理這個問題的。 先來看看我們需要實現的效果,這是一張gif圖片,當我們列表上拉載入下一頁的時候需要使用這個效果,如下圖: 我們的解決方案是:將gif切成15張png的圖片,暫且命名為loadin

React-Native系列》40 ReactNativebundle檔案瘦身

【背景】目前,我們的app中採用Native+RN的混合模式開發,每個由RN開發的頁面,頁面的載入都是載入的一個Bundle檔案,而一個Bundle檔案的大小為500-600Kb。在沒有內建bundle檔案的情況下,使用者想要使用所有由RN開發的功能,需要下載 n* 500

15react 元件與不可控元件

import React from 'react'; import ReactDOM from 'react-dom'; // 不可控組建,要是使用refs屬性對DOM節點進行操作 class U

React-Native系列RNnative交互與數據傳遞

lis 寫博客 android undle tco intent pack instance isa RN怎麽與native交互的呢? 下面我們通過一個簡單的Demo來實現:RN頁面調起Native頁面,Native頁面選擇電話本數據,將數據回傳給RN展示。 首先是 Nat

React-Native系列》24 結合Demo學習Redux框架

8月的最後一天了,那就打響最後一炮吧! 我們介紹了Flux框架,我們打算在接下來的專案裡使用Redux框架,這兩天簡單學習了下Redux。打算結合一個Demo來講解。 還是先來說說概念吧。 Redux 三個基本原則 單一資料來源 整個應用的 state 被儲存在一棵 obj

REACT NATIVE 系列教程十】真機執行報錯COMMAND /BIN/SH FAILED WITH EXIT CODE 1 的解決方法

Himi最近在真機執行遇到  Command /bin/sh failed with exit code 1  的錯誤, 模擬器執行沒有任何問題。此問題已解決,這裡分享下解決方案。先來看下錯誤日誌,如下圖:主要是劃線的部分:1.PhaseScriptExecution Bundle\ React\ Nativ

react-native系列(1)入門篇:瞭解RN前景和入門指引

React-Native是一門用於開發移動應用程式的開源技術。 隨著原生開發Android和IOS移動應用的成本越來越高,很多企業選擇使用跨平臺一站式開發的React-Native(簡稱RN)作為替代方案。在Facebook的引領下,國外很多大廠也紛紛使用RN來開發移動應用程式,構建出世界一

REACT NATIVE 系列教程四】重新整理元件RENDER(重新渲染)的三種方式詳解

開發過遊戲的都應該很清楚,“刷屏”是多麼的重要。其實開發應用也如此,當元件的資料被修改後,如何及時更新元件呈現出最新的資料與效果一樣至關重要。那麼這裡Himi大概講三種常用的方式:this.setState()  【最為常用】這是在事件處理函式中和請求回撥函式中觸發 UI 更新的主要方法。一般情況下setSt

React-Native系列》26 ReactNative實現圖片上傳功能

在檢視ReactNative的官方文件的時候,你會發現其實Fackbook是沒有提供圖片上傳功能的。如果我們的專案裡需要使用圖片上傳(用JS 實現圖片上傳),那我們有沒有什麼辦法呢?解決方案:利用FormData物件,你可以使用一系列的鍵值對來模擬一個完整的表單,然後使用XM

React Native系列flexbox佈局詳解

CSS3為我們提供了一種可伸縮的靈活的web頁面佈局方式-flexbox佈局,它具有很強大的功能,可以很輕鬆實現很多複雜佈局,在它出現之前,我們經常使用的佈局方式是浮動或者固定寬度+百分比來進行佈局,程式碼量較大且難以理解。 為了更好理解flexbox佈局,這裡首先要介

REACT NATIVE 系列教程九】REACT NATIVE版本升級步驟與注意事項!

       由於React Native處於快速迭代發展中,因此元件功能的擴充套件、語法的變更也將會有較大的區別,因此升級版本則屬於務必掌握的了。昨天Himi剛從0.23版本升級到0.26,升級的主要原因有兩點:1. 一些元件在最新版本中加入了很多新的屬性,例如0.23版本中Modal動畫沒有最新的屬性:a

React-Native系列》4表單介面程式碼編寫

今天就開始投入到RN專案了,做後端出生,寫Android和iOS確實有點勉強,不過還是要把這段經歷記錄下來。 要實現的功能介面如下: 這個是最簡單的Form表單,第一步實現介面吧,不管點選效果,不管篩選控制元件...  思路: 我把這幾類控制元件分為了3類: 1、帶頭

React-Native系列元件封裝Dialog(iOS和Android通用)

最近在專案中封裝了個Dialog元件,iOS和Android平臺上通用。 元件Dialog顯示時,從頁面頂部滑動到中間,點選確認或取消後,從頁面底部劃出頁面,需要注意動畫的實現。 原始碼如下: [javascript] view plain copy

REACT NATIVE 系列教程五】NAVIGATOR(頁面導航)的基本使用與傳參

今天介紹一種應用開發中常用的負責頁面切換及導航功能的元件:Navigator一:Navigator對於頁面導航其實主要功能就是:每個頁面都知道本身應該切換到哪個頁面,並且切到的頁面會記錄從哪裡來,如果要返回的話,知道返回到哪個頁面。這一切都不需要再用邏輯管理!而且每個頁面之間也可以進行引數傳遞,很方便的元件。

React Native系列flexbox佈局(伸縮屬性)

###伸縮專案的屬性 1.order 定義專案的排列順序,數值越小,排列越靠前,預設值為0,語法為:order:整數值 2.flex-grow:類似安卓裡面的權重 定義伸縮專案的放大比例,預設值為0,即表示如果存在剩餘空間,也不放大,語法為:flex-grow:整數值 3.

React-Native系列》33 鍵盤遮擋問題處理

最近在專案中,使用TextInput元件的時候,發現鍵盤彈出的時候,遮蓋了表單。諮詢了下做iOS的同學,他們的處理是計算鍵盤的高度和當前輸入域的位置,將介面向上移動一段距離。那在ReactNative中是否也可以有類似的處理方法呢?答案是肯定的,我們使用ScrollVIew的

React Native bundle 打包拆包工具moles-packer

oles-packer 是由攜程框架團隊研發的,與攜程moles框架配套使用的React Native 打包和拆包工具,同時支援原生的 React Native 專案。 安裝 從npm倉庫中安裝 npm install -g moles-packer 獲取幫助資訊 m