Android開(kāi)發(fā)之React Navigation 導(dǎo)航欄樣式調(diào)整+底部角標(biāo)消息提示
五一佳節(jié)匆匆而過(guò),有人選擇在外面看人山人海,有人選擇宅在家中度過(guò)五一,也有人依然堅(jiān)守在第一線,致敬!
這是堅(jiān)持學(xué)習(xí)react-native的第二篇文章,可能會(huì)遲到,但是絕不會(huì)缺席,這篇要涉及到的是react-navigation,也是rn社區(qū)主推的一個(gè)導(dǎo)航庫(kù)。
網(wǎng)上關(guān)于react-navigation的基本使用也是一抓一大把,這里對(duì)于它的使用不做過(guò)多介紹,主要記錄使用過(guò)程中的其他問(wèn)題。
因?yàn)閍ndroid 和iOS 手機(jī)的不同,導(dǎo)航欄的顯示也不太一樣,而這篇文章會(huì)盡量的配置屬性,讓兩端的導(dǎo)航欄樣式、頁(yè)面跳轉(zhuǎn)的動(dòng)畫(huà)保持一致,同時(shí)還會(huì)介紹底部導(dǎo)航欄添加角標(biāo)的方法。
這里使用的是3.9.1版本,網(wǎng)上好多文章是2.x版本的,用法基本大同小異。
android 導(dǎo)航欄標(biāo)題居中適配
默認(rèn)情況下,iOS的標(biāo)題居中顯示,而android的則不?。。?/p>

解決:createStackNavigator的defaultNavigationOptions屬性里配置textAlign和flex
const AppStackNavigator = createStackNavigator({
HomeScreen: {screen: HomeScreen},
RainScreen: {screen: RainScreen}
},{
defaultNavigationOptions:{
...
headerTitleStyle: {
...
textAlign: "center", //用于android 機(jī)型標(biāo)題居中顯示
flex:1
}
}
})
注:android機(jī)型標(biāo)題默認(rèn)不居中,textAlign和flex的屬性配置用于android機(jī)型標(biāo)題居中顯示。
在這種情況下,如果配置了headerLeft或者headerRight 屬性,會(huì)出現(xiàn)標(biāo)題偏移的現(xiàn)象。

直接在defaultNavigationOptions里配置空view的headerLeft和headerRight
defaultNavigationOptions:{
...
headerTitleStyle: {
...
textAlign: "center", //用于android 機(jī)型標(biāo)題居中顯示
flex:1,
},
headerRight: <View/>,
headerLeft: <View/>
}
這時(shí)候標(biāo)題居中,同時(shí)可以在各自的頁(yè)面里面去重寫(xiě)headerLeft的樣式。
android 導(dǎo)航欄去除陰影樣式
android的導(dǎo)航欄還有陰影的樣式,添加elevation 設(shè)置陰影的偏移量
defaultNavigationOptions:{
headerStyle:{
backgroundColor:"#fff",
elevation:0.5
},
...
}

至此的導(dǎo)航欄的效果跟iOS基本保持一致。
android 頁(yè)面跳轉(zhuǎn)動(dòng)畫(huà),自右向左打開(kāi)
默認(rèn)的android頁(yè)面跳轉(zhuǎn)是自下而上打開(kāi)頁(yè)面,而要與iOS的保持一致的自右向左,配置transitionConfig屬性。
const AppStackNavigator = createStackNavigator({
HomeScreen: {screen: HomeScreen},
...
},{
defaultNavigationOptions:{
...
},
transitionConfig: () => ({
screenInterpolator: (sceneProps) => {
return StackViewStyleInterpolator.forHorizontal(sceneProps)
},
}),
})
底部導(dǎo)航添加消息角標(biāo)
有時(shí)候我們會(huì)遇到這樣的需求,在底部導(dǎo)航處添加消息的角標(biāo),提醒用戶(hù)閱讀的。

在tabBarIcon的屬性里直接添加圖標(biāo)顯示的,這里的msg變量數(shù)值是全局的,只做演示使用,實(shí)際項(xiàng)目里可以根據(jù)接口返回?cái)?shù)據(jù),可以搭配mobx 一起使用。
const rootTab = createBottomTabNavigator({
...
info: {
screen: InfoStack,
navigationOptions: {
tabBarLabel: "消息",
tabBarIcon: ({focused, tintColor}) => {
let icon = focused ?
require('../resources/img/mine_icon_message_selected.png') :
require('../resources/img/mine_icon_message_default.png');
return <View>
{
msg > 0 ?
<View style={{
width:12,
height:12,
justifyContent:"center",
position: 'absolute',
zIndex: 9,
backgroundColor: "#FB3768",
borderRadius:6,
right:0,
top:-2,
}}>
<Text style={[{fontSize:10, color:"#fff", textAlign:"center",}]}>{msg}</Text>
</View> : null
}
<Image source={icon} style={{width: 34, height: 26}}/>
</View>
}
}
}
},{
...
defaultNavigationOptions: ({navigation, screenProps}) => ({
tabBarOnPress: (obj) => {
//點(diǎn)擊的時(shí)候清除消息
const {routeName} = obj.navigation.state;
if (routeName === "info") {
msg = 0
}
obj.navigation.navigate(obj.navigation.state.key)
}
})
})
以上幾點(diǎn)是在react-navigation的使用過(guò)程中遇到的問(wèn)題以及解決方法,相關(guān)代碼已經(jīng)傳到了github上https://github.com/taixiang/reactNativeDemo,僅供參考,如果有更好的方式 歡迎一起學(xué)習(xí)研究。
總結(jié)
以上所述是小編給大家介紹的React Navigation 導(dǎo)航欄樣式調(diào)整+底部角標(biāo)消息提示 ,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
修改Android簽名證書(shū)keystore的密碼、別名alias以及別名密碼
這篇文章主要介紹了修改Android簽名證書(shū)keystore的密碼、別名alias以及別名密碼的相關(guān)資料,需要的朋友可以參考下2015-12-12
Android的Launcher啟動(dòng)器中添加快捷方式及小部件實(shí)例
這篇文章主要介紹了在Android的Launcher啟動(dòng)器中添加快捷方式及窗口小部件的方法,包括在自己的應(yīng)用程序中添加窗口小部件AppWidget的例子,需要的朋友可以參考下2016-02-02
Android?Studio實(shí)現(xiàn)彈窗設(shè)置
這篇文章主要為大家詳細(xì)介紹了Android?Studio實(shí)現(xiàn)彈窗設(shè)置,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Android程序開(kāi)發(fā)之Fragment實(shí)現(xiàn)底部導(dǎo)航欄實(shí)例代碼
流行的應(yīng)用的導(dǎo)航一般分為兩種,一種是底部導(dǎo)航,一種是側(cè)邊欄。本文給大家介紹Fragment實(shí)現(xiàn)底部導(dǎo)航欄,對(duì)Fragment實(shí)現(xiàn)底部導(dǎo)航欄相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-03-03
Android自定義相機(jī)實(shí)現(xiàn)定時(shí)拍照功能
這篇文章主要為大家詳細(xì)介紹了Android自定義相機(jī)實(shí)現(xiàn)定時(shí)拍照功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Flutter實(shí)現(xiàn)增強(qiáng)版的頁(yè)面懸浮按鈕的示例代碼
Flutter?自帶的?FloatingActionButton?為我們提供了一個(gè)懸浮在頂部的按鈕,這個(gè)按鈕始終在最頂層,因此可以做一些快捷的操作。本文就來(lái)和大家詳細(xì)聊聊2023-01-01

