日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自定义react-navigation的TabBar

發布時間:2024/4/17 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义react-navigation的TabBar 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在某些情況下,默認的react-navigation的tab bar無法滿足開發者的要求。這個時候就需要自定義一個tab bar了。本文就基于react-navigtion v2來演示如何實現一個自定義tab bar。

這里主要處理的是再android里,當界面中有輸入框,喚起軟鍵盤的時候位于底部的tab bar也會浮動到鍵盤的上方。這顯然不是我們需要的。所以,需要用自定義的tab bar來解決這個問題。

Keyboard模塊

問題是,有鍵盤的時候tabbar會被頂起來,鍵盤消失的時候tab bar也會恢復到正常的位置。 那么處理這個問題的最好辦法就是,當鍵盤喚起的時候讓tab bar不可見,當鍵盤消失當時候再讓tab bar顯示出來。

這就需要用到Keyboard了。

import { Keyboard } from 'react-native'; 復制代碼

Keyboard模塊專門用來處理鍵盤事件。通過這個模塊我們就可以得知鍵盤要喚起,還是要消失。

import React, { Component } from 'react'; import { Keyboard, TextInput } from 'react-native';class Example extends Component {componentDidMount () {this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow);this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide);}componentWillUnmount () {this.keyboardDidShowListener.remove();this.keyboardDidHideListener.remove();}_keyboardDidShow () {alert('Keyboard Shown');}_keyboardDidHide () {alert('Keyboard Hidden');}render() {return (<TextInputonSubmitEditing={Keyboard.dismiss}/>);} } 復制代碼

在componentDidMount的時候綁定鍵盤的兩個事件:

  • keyboardDidShow, 鍵盤即將出現
  • keyboardDidHide, 鍵盤即將隱藏
  • 通過Keyboard模塊綁定了這兩個事件之后就可以在綁定的回調里讓tab bar顯示和隱藏了。

    自定義tab bar

    在react-navigation v2中,要實現自定義的tab bar非常簡單:

    import {createBottomTabNavigator,createStackNavigator, } from 'react-navigation';class DetailsScreen extends React.Component {render() {return (<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}><Text>Details!</Text></View>);} }class HomeScreen extends React.Component {render() {return (<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>{/* other code from before here */}<Buttontitle="Go to Details"onPress={() => this.props.navigation.navigate('Details')}/></View>);} }class SettingsScreen extends React.Component {render() {return (<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>{/* other code from before here */}<Buttontitle="Go to Details"onPress={() => this.props.navigation.navigate('Details')}/></View>);} }const HomeStack = createStackNavigator({Home: HomeScreen,Details: DetailsScreen, });const SettingsStack = createStackNavigator({Settings: SettingsScreen,Details: DetailsScreen, });export default createBottomTabNavigator({Home: HomeStack,Settings: SettingsStack,},{/* Other configuration remains unchanged */} ); 復制代碼

    這里創建了一個每一個tab項都是一個stack navigator的tab bar。這里當然使用的是默認的tab bar。方法createBottomTabNavigator會返回一個在底部的tab bar。

    我們來添加一個自定義的tab bar:

    // ...略...export default createBottomTabNavigator({Home: HomeStack,Settings: SettingsStack,},{tabBarComponent: CustomTabComponent,} ); 復制代碼

    CustomTabView就是自定義的tab bar。

    當程序運行起來以后,react-navigation會把tab bar所需要的內容(tab的label、icon、navigate到什么地方等都通過prop的方式傳進來)。但是,我們這里并不打算做其他的定制,所以可以通過一個簡單的方式把這些tab bar的item都繪制出來。

    這就需要用到react-navigation-tabs。這個包提供了tab bar的所有默認的實現。包括上面提到的props的解析都有。看下代碼:

    import React from 'react'; import { Keyboard } from 'react-native'; import { BottomTabBar } from 'react-navigation-tabs';type Prop = {}; type State = { visible: boolean };export default class CustomTabComponent extends React.Component<Prop, State> {state: State = { visible: true };componentDidMount() {this.kbShowListener = Keyboard.addListener('keyboardDidShow', this.keyboardWillShow);this.kbHideListener = Keyboard.addListener('keyboardDidHide', this.keyboardWillHide);}keyboardWillShow = () => {console.log('keyboardwillshow');this.setState({ visible: false });};keyboardWillHide = () => {console.log('keyboardwillhide');this.setState({ visible: true });};componentWillUnmount() {this.kbShowListener.remove();this.kbHideListener.remove();}render() {return this.state.visible && <BottomTabBar {...this.props} />;} } 復制代碼

    在keyboard顯示的時候隱藏tab bar:

    keyboardWillShow = () => {this.setState({ visible: false });}; 復制代碼

    在鍵盤隱藏的時候顯示tab bar:

    keyboardWillHide = () => {this.setState({ visible: true });}; 復制代碼

    顯示出全部的tab item:

    render() {return this.state.visible && <BottomTabBar {...this.props} />;} 復制代碼

    最后

    處理軟鍵盤導致的tab bar上浮這個問題就完美解決了。其他的很多時候軟鍵盤的出現都會導致類似的問題。基本上都可以通過綁定Keyboard模塊的方式來解決。

    對于tab bar本身有定制需要的,則可以通過自定義tab bar實現。正好本文解決了軟鍵盤對tab bar的影響,也開是了一個解決自定義tab bar的門。有深度定義tab bar的同學,就需要解析從react-navigation傳過來的props了。

    總結

    以上是生活随笔為你收集整理的自定义react-navigation的TabBar的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产成人精品一区二区 | av中文字幕免费在线观看 | 极品少妇xxxx精品少妇 | 亚洲一线二线在线观看 | 别揉我奶头啊嗯一区二区 | 国模私拍在线观看 | 国产成人无码精品久久久性色 | 亚洲天堂久久 | 九草在线观看 | 欧美激情一区在线 | av网站免费观看 | 91高潮大合集爽到抽搐 | 天天躁日日躁狠狠躁 | 国产欧美一区二区三区白浆喷水 | 欧美首页 | 亚洲一区二区三区婷婷 | 久久免费黄色网址 | 爱情岛论坛成人av | 亚洲免费久久 | 在线高清观看免费观看 | 久久久亚洲欧洲 | 日韩a级一片 | 国产精品高清网站 | 精品一区久久 | 91麻豆精品国产午夜天堂 | 污视频导航 | 激情亚洲视频 | 中文字字幕一区二区三区四区五区 | 久久av一区二区 | 日日夜夜综合网 | 中文字幕av观看 | 国产精品久久久久久久9999 | 国产99re| 粗大的内捧猛烈进出视频 | 国产精品毛片久久久久久久av | 欧美色图视频在线 | 亚洲精品国产免费 | www.色播.com| 狠狠干综合网 | 激情深爱五月 | www.天堂在线 | 欧美午夜剧场 | 亚洲欧洲精品一区二区三区 | 亚洲精品视频免费 | 黄色网炮 | 青青操操| 中日韩午夜理伦电影免费 | 91精品国自产在线偷拍蜜桃 | 欧美性一级片 | 少妇高潮一区二区三区 | 最近最经典中文mv字幕 | 超碰久操 | 炕上如狼似虎的呻吟声 | 国产精品5区 | 精品一区二区三区无码按摩 | 老司机午夜免费精品视频 | 欧美精品黑人 | 66亚洲一卡2卡新区成片发布 | 免费看黄色的视频 | 亚洲成人77777 | 国内自拍第一页 | 91蝌蚪视频在线 | 成人wwwww免费观看 | 久艹av| 亚洲av无码国产在丝袜线观看 | 六月色婷 | a爱视频| 大奶子情人 | 天天天干干干 | 色xxxx| 一级黄色大全 | av55 | 免费高清av在线看 | 欧美在线v | 亚洲精品一区久久久久久 | 日韩成人精品一区二区三区 | 国产微拍一区 | 波多野结衣在线一区二区 | 欧美日比视频 | 亚洲第一a | 91极品国产 | 奇米影视77777 | 精品动漫一区 | 亚洲精品在线观看视频 | 国精产品一区二区三区 | 日欧一级片 | 久草免费资源 | 天堂福利视频 | 一级少妇片| 九七影院在线观看免费观看电视 | 午夜免费毛片 | 奇米狠狠去啦 | 天天摸日日摸狠狠添 | 国产乱码精品一区二区三区五月婷 | 在线黄色网页 | 中文字幕高清视频 | 国产精品美女久久久久久久 | 天堂影音 | 亚洲手机av| 在线一区二区三区四区五区 |