React-native之 Touchable控件(8)

一. 簡(jiǎn)介

React Native沒(méi)有像Web開(kāi)發(fā)那樣給元素綁定click事件,Text組件有onPress事件回調(diào)伏蚊,View組件是沒(méi)有的揭保,但是在實(shí)際項(xiàng)目開(kāi)發(fā)中埃叭,很多其他的組件也是需要可以被點(diǎn)擊的睁搭,RN提供了4個(gè)組件來(lái)賦予被點(diǎn)擊的能力(去包裹其他組件即可),這4個(gè)組件被稱為“Touchable類組件”.
TouchableHighlight,TouchableNativeFeedback,TouchableOpacity,TouchableWithoutFeedback谆沃。其中最后一個(gè)控件是觸摸點(diǎn)擊不帶反饋效果的钝凶,另外三個(gè)都是有反饋效果.可以看成是前面三個(gè)繼承TouchableWithoutFeedback。

二. 屬性及示例
TouchableWithoutFeedback

1.基本介紹
除非你有一個(gè)很好的理由唁影,否則不要用這個(gè)組件耕陷。所有能夠響應(yīng)觸屏操作的元素在觸屏后都應(yīng)該有一個(gè)視覺(jué)上的反饋(然而本組件沒(méi)有任何視覺(jué)反饋)。這也是為什么一個(gè)"web"應(yīng)用總是顯得不夠"原生"的主要原因之一据沈。
2.屬性
(1)accessibilityComponentType 設(shè)置可訪問(wèn)的組件類型
(2)accessibilityTraits 設(shè)置訪問(wèn)特征
(3)accessible bool設(shè)置當(dāng)前組件是否可以訪問(wèn)
(4)delayLongPress number 設(shè)置延遲時(shí)間 單位時(shí)間為毫秒 從onPressIn開(kāi)始哟沫,到onLongPress被調(diào)用的延遲
(5)delayPressIn number 設(shè)置延遲的時(shí)間,單位為毫秒锌介,從用戶觸摸控件開(kāi)始到onPressIn被調(diào)用這一段時(shí)間
(6)delayPressOut number 設(shè)置延遲的時(shí)間嗜诀,單位為毫秒,從用戶觸摸事件釋放開(kāi)始到onPressOut被調(diào)用這一段時(shí)間
(7)onLayout function 當(dāng)組件加載或者改組件的布局發(fā)生變化的時(shí)候調(diào)用孔祸。調(diào)用傳入的參數(shù)為{nativeEvent:{layout:{x,y,width,height}}}
(8)onLongPress function 當(dāng)用戶長(zhǎng)時(shí)間按壓組件時(shí)調(diào)用該方法
(9)onPress function 當(dāng)用戶點(diǎn)擊的時(shí)候調(diào)用(觸摸結(jié)束)隆敢。 但是如果事件被取消了就不會(huì)調(diào)用
(10)onPressIn function 用戶開(kāi)始觸摸組件回調(diào)方法
(11)onPressOut function 用戶完成觸摸組件之后回調(diào)方法
pressRetentionOffset {top:number,left:number,bottom:number,right:number} 該設(shè)置當(dāng)視圖滾動(dòng)禁用的情況下,可以定義當(dāng)手指距離組件的距離崔慧。當(dāng)大于該距離該組件會(huì)失去響應(yīng)拂蝎。當(dāng)少于該距離的時(shí)候,該組件會(huì)重新進(jìn)行響應(yīng)惶室。

示例

export default class TouchableDemo extends Component { show(text) { alert(text); } render() { return ( <View style={styles.flex}> <TouchableWithoutFeedback onPress={this.show.bind(this,'學(xué)習(xí)RN的TouchableWithoutFeedback屬性')}> <Text style={styles.fontItem}>學(xué)習(xí)RN的TouchableWithoutFeedback屬性</Text> </TouchableWithoutFeedback> </View> ); } } const styles = StyleSheet.create({ flex: { flex: 1, marginTop:30, }, fontItem: { fontSize: 16, color: '#434343', marginLeft: 10, marginRight: 10, marginTop:10, }, }); AppRegistry.registerComponent('TouchableDemo', () => TouchableDemo);
效果 沒(méi)有任何效果顯示

TouchableWithoutFeedback.png
TouchableHighlight

![Uploading TouchableHighlight_933757.png . . .]
(觸摸點(diǎn)擊高亮效果)
1.基本介紹
本組件用于封裝視圖温自,使其可以正確響應(yīng)觸摸操作。當(dāng)按下的時(shí)候皇钞,封裝的視圖的不透明度會(huì)降低悼泌,同時(shí)會(huì)有一個(gè)底層的顏色透過(guò)而被用戶看到,使得視圖變暗或變亮夹界。在底層實(shí)現(xiàn)上馆里,實(shí)際會(huì)創(chuàng)建一個(gè)新的視圖到視圖層級(jí)中,如果使用的方法不正確可柿,有時(shí)候會(huì)導(dǎo)致一些不希望出現(xiàn)的視覺(jué)效果也拜。譬如沒(méi)有給視圖的backgroundColor顯式聲明一個(gè)不透明的顏色。
【注意】TouchableHighlight只支持一個(gè)子節(jié)點(diǎn)趾痘,如果你需要設(shè)置多個(gè)子視圖組件,那么就需要使用View節(jié)點(diǎn)進(jìn)行包裝蔓钟。
2.屬性
(1).TouchableWithoutFeedback的屬性永票,該組件都可以進(jìn)行使用
(2)activeOpacity number 該用來(lái)設(shè)置視圖在進(jìn)行觸摸的時(shí)候,顯示的不透明度(0-1之間)
(3)onHideUnderlay function 當(dāng)?shù)讓拥念伾浑[藏的時(shí)候調(diào)用
(4)onShowUnderlay function 當(dāng)?shù)讓拥念伾伙@示的時(shí)候調(diào)用
(5)style 可以設(shè)置控件的風(fēng)格演示,該風(fēng)格演示可以參考View組件的style
underlayColor 當(dāng)觸摸或者點(diǎn)擊控件的時(shí)候顯示出的顏色

示例(樣式表與點(diǎn)擊事件和上面的一樣侣集,這里只貼出主要代碼)

render() { return ( <View style={styles.flex}> <TouchableHighlight onPress={this.show.bind(this,'學(xué)習(xí)RN的TouchableHighlight屬性')} underlayColor='#E1F6FF'> <Text style={styles.fontItem}>學(xué)習(xí)RN的TouchableHighlight屬性</Text> </TouchableHighlight> </View> ); }
效果 背景高亮

TouchableHighlight.png
TouchableOpacity

1.簡(jiǎn)介
本組件用于封裝視圖键俱,使其可以正確響應(yīng)觸摸操作。當(dāng)按下的時(shí)候世分,封裝的視圖的不透明度會(huì)降低编振。這個(gè)過(guò)程并不會(huì)真正改變視圖層級(jí),大部分情況下很容易添加到應(yīng)用中而不會(huì)帶來(lái)一些奇怪的副作用臭埋。(譯注:此組件與TouchableHighlight的區(qū)別在于并沒(méi)有額外的顏色變化踪央,更適于一般場(chǎng)景)
2.屬性
(1).TouchableWithoutFeedback的屬性,該組件都可以進(jìn)行使用
(2).activeOpacity number 設(shè)置當(dāng)用戶觸摸的時(shí)候瓢阴,組件的透明度

示例

render() { return ( <View style={styles.flex}> <TouchableOpacity onPress={this.show.bind(this,'學(xué)習(xí)RN的TouchableOpacity屬性')}> <Text style={styles.fontItem}>學(xué)習(xí)RN的TouchableOpacity屬性</Text> </TouchableOpacity> </View> ); }
效果
默認(rèn)效果

TouchableOpacity_default.png

點(diǎn)擊后效果 顏色改變

TouchableOpacity_pressed.png
TouchableNativeFeedback

1.基本介紹
本組件用于封裝視圖畅蹂,使其可以正確響應(yīng)觸摸操作(僅限Android平臺(tái))。在Android設(shè)備上荣恐,這個(gè)組件利用原生狀態(tài)來(lái)渲染觸摸的反饋液斜。目前它只支持一個(gè)單獨(dú)的View實(shí)例作為子節(jié)點(diǎn)。在底層實(shí)現(xiàn)上叠穆,實(shí)際會(huì)創(chuàng)建一個(gè)新的RCTView結(jié)點(diǎn)替換當(dāng)前的子View少漆,并附帶一些額外的屬性。
原生觸摸操作反饋的背景可以使用background屬性來(lái)自定義

示例

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> ); },
效果

TouchableNativeFeedback.png

最后貼出整體代碼
import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, TouchableHighlight, TouchableOpacity, TouchableWithoutFeedback, TouchableNativeFeedback, View } from 'react-native';
export default class TouchableDemo extends Component { show(text) { alert(text); }
render() { return ( <View style={styles.flex}> <TouchableWithoutFeedback onPress={this.show.bind(this,'學(xué)習(xí)RN的TouchableWithoutFeedback屬性')}> <Text style={styles.fontItem}>學(xué)習(xí)RN的TouchableWithoutFeedback屬性</Text> </TouchableWithoutFeedback>
<TouchableHighlight onPress={this.show.bind(this,'學(xué)習(xí)RN的TouchableHighlight屬性')} underlayColor='#E1F6FF'> <Text style={styles.fontItem}>學(xué)習(xí)RN的TouchableHighlight屬性</Text> </TouchableHighlight>
<TouchableOpacity onPress={this.show.bind(this,'學(xué)習(xí)RN的TouchableOpacity屬性')}> <Text style={styles.fontItem}>學(xué)習(xí)RN的TouchableOpacity屬性</Text> </TouchableOpacity>
<TouchableNativeFeedback onPress={this.show.bind(this,'學(xué)習(xí)RN的TouchableNativeFeedback屬性')} > <View style={{width: 150, height: 100, backgroundColor: 'red'}}> <Text style={{margin: 30}}>學(xué)習(xí)RN的TouchableNativeFeedback屬性</Text> </View> </TouchableNativeFeedback>
</View> ); } }
const styles = StyleSheet.create({ flex: { flex: 1, marginTop:30, }, fontItem: { fontSize: 16, color: '#434343', marginLeft: 10, marginRight: 10, marginTop:10, }, });
AppRegistry.registerComponent('TouchableDemo', () => TouchableDemo);

記錄自己的RN學(xué)習(xí)之路硼被,有什么不對(duì)的地方示损,一起討論進(jìn)步
最后感謝RN中文網(wǎng),江清清的專欄祷嘶,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屎媳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子论巍,更是在濱河造成了極大的恐慌烛谊,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘉汰,死亡現(xiàn)場(chǎng)離奇詭異丹禀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鞋怀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門双泪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人密似,你說(shuō)我怎么就攤上這事焙矛。” “怎么了残腌?”我有些...
    開(kāi)封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵村斟,是天一觀的道長(zhǎng)贫导。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蟆盹,這世上最難降的妖魔是什么孩灯? 我笑而不...
    開(kāi)封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮逾滥,結(jié)果婚禮上峰档,老公的妹妹穿的比我還像新娘。我一直安慰自己寨昙,他們只是感情好讥巡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著毅待,像睡著了一般尚卫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尸红,一...
    開(kāi)封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天吱涉,我揣著相機(jī)與錄音,去河邊找鬼外里。 笑死怎爵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盅蝗。 我是一名探鬼主播鳖链,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼墩莫!你這毒婦竟也來(lái)了芙委?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狂秦,失蹤者是張志新(化名)和其女友劉穎灌侣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裂问,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侧啼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堪簿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痊乾。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖椭更,靈堂內(nèi)的尸體忽然破棺而出哪审,到底是詐尸還是另有隱情,我是刑警寧澤虑瀑,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布协饲,位于F島的核電站畏腕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏茉稠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一把夸、第九天 我趴在偏房一處隱蔽的房頂上張望而线。 院中可真熱鬧,春花似錦恋日、人聲如沸膀篮。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)誓竿。三九已至,卻和暖如春谈截,著一層夾襖步出監(jiān)牢的瞬間筷屡,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工簸喂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毙死,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓喻鳄,卻偏偏與公主長(zhǎng)得像扼倘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子除呵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 前言 本文有配套視頻再菊,可以酌情觀看。 文中內(nèi)容因各人理解不同颜曾,可能會(huì)有所偏差纠拔,歡迎朋友們聯(lián)系我。 文中所有內(nèi)容僅供...
    珍此良辰閱讀 1,500評(píng)論 13 7
  • React Native 1.React Native之了解 1.1 Native開(kāi)發(fā)優(yōu)勢(shì): Native的原生控...
    兵兵哥哥閱讀 1,080評(píng)論 0 1
  • 前言 學(xué)習(xí)本系列內(nèi)容需要具備一定 HTML 開(kāi)發(fā)基礎(chǔ)泛啸,沒(méi)有基礎(chǔ)的朋友可以先轉(zhuǎn)至 HTML快速入門(一) 學(xué)習(xí) 本人...
    珍此良辰閱讀 6,406評(píng)論 0 9
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,777評(píng)論 25 707
  • 很神奇是不是绿语,世界這么大,你就是會(huì)關(guān)注一些人候址,然后被他感染吕粹,被他吸引,或許會(huì)見(jiàn)一面岗仑,也許一生都不得見(jiàn)匹耕,可是...
    遠(yuǎn)方的雨季閱讀 259評(píng)論 0 0