<Button title=“User Login” onPress={() => navigation.navigate(“Home”)}>
);
}
function HomeScreen({navigation}) {
return (
<View style={{ flex: 1, alignItems: ‘center’, justifyContent: ‘center’ }}>
<Button title=“Home Page” onPress={() => navigation.navigate(“Login”)}>
);
}
const Stack = createStackNavigator();
// 想隐藏第一个标题的头部导航
// <Stack.Screen name=“Login” options={{headerShown: false}} component={LoginScreen} />
function App() {
return (
<Stack.Navigator>
// options={({ route }) => ({ title: route.params.name })} // 头部导航可以根据路由参数动态修改
<Stack.Screen name=“Login” component={LoginScreen} />
<Stack.Screen name=“Home” component={HomeScreen} />
</Stack.Navigator>
);
}
export default App;
2.4 设置stack堆栈导航动画
内置了相应的跳转动画
forHorizontal
:从右向左进入forVertical
:从下向上进入forFadeFromBottomAndroid
:从底部淡出forFade
:无动画
function App() {
return (
<Stack.Navigator>
<Stack.Screen name=“Login” component={LoginScreen} />
// Home页面 添加从右向左进入动画
<Stack.Screen name=“Home” component={HomeScreen} options={{headerShown: false, cardStyleInterpolator: CardStyleInterpolators.forHorizontalIOS}} />
</Stack.Navigator>
);
}
每次调用推送时,我们都会向导航堆栈添加新路由。当您调用导航时,它首先尝试查找具有该名称的现有路由,并且只有在堆栈上还没有新路由时,才会推送新路由。
这样就完成了一个堆栈导航了,可以完成登录注册这种类似页面的切换了。
2.5 导航器(路由)传参
2.5.1 嵌套在导航内的参数
将路由上需要的参数放在一个对象里,作为 navigation.navigate
函数的第二个参数:navigation.navigate('RouteName', {key: value})
,在组件中获取这个参数:route.params。
navigation.navigate(‘Home’, {
screen: ‘Settings’,
params: { user: ‘Tom’ },
});
2.5.2 更新参数
页面上也可以更新参数,类似更新页面状态。navigation.setParams
就可以用来更新页面参数
你也可以向页面传递一些初始参数。如果导航到页面并没有设置任何参数,这个初始参数将会被使用。它们会与传递的参数进行浅合并。初始参数被指定为initialParams 属性:
<Stack.Screen
name=“Login”
component={Login}
initialParams={{ userId: 42 }}
/>
2.5.3 传递参数到之前的页面
不仅仅能传递参数到新的页面,也能传递参数到之前的页面。
想做到这个,你可以使用navigate
的方法,如果页面存在的话,可以使用像 goBack
这样的方法。你可以通过navigate
携带参数将参数传回去:
// Some.js
import React, { useState, Component } from “react”;
import { Text, View } from “react-native”;
class App extends Component {
constructor(props) {
super(props)
}
render() {
return (
)
}
}
export default App;
// Home.js
import * as React from ‘react’;
import { View, TextInput, Button } from ‘react-native’;
function goLogin(navigation, postText) {
navigation.push(“Login”, {type: postText}) // 把输入框的值传递给 Login 页面
}
function Some({navigation, route}) {
let {text} = route.params;
let [postText, setPostText] = React.useState(text);
return (
<TextInput
multiline
placeholder=“What’s on your mind?”
style={{ height: 200, padding: 10, backgroundColor: ‘gray’ }}
value={postText}
onChangeText={setPostText}
/>
<Button
title=“Go to Login”
onPress={() => goLogin(navigation, postText)}
/>
);
}
export default Some;
2.6 配置header bar
自定义 header
样式有3个关键属性:headerStyle
, headerTintColor
,和 headerTitleStyle
。
function App() {
return (
<Stack.Navigator>
<Stack.Screen
name=“Home”
component={Home}
options={{
title: ‘My home’,
headerStyle: {
backgroundColor: ‘#f4511e’,
},
headerTintColor: ‘#fff’,
headerTitleStyle: {
fontWeight: ‘bold’,
},
}}
/>
</Stack.Navigator>
);
}
2.7 Header Button
给 header 右侧添加一个操作按钮–常见功能
function App() {
return (
<Stack.Navigator initialRouteName=“Login”>
<Stack.Screen options={{headerShown: false}} name=“Login” component={Login} />
<Stack.Screen name=“Some” component={Some}
options={{
headerRight: () => (
<Button
onPress={() => alert(‘This is a button!’)}
title=“add”
color=“#999”
/>
),
}}
/>
</Stack.Navigator>
);
}
3. 嵌套导航(Tabs)
3.1 安装依赖
npm install @react-navigation/bottom-tabs // 5.x版本
3.2 Example
// Some.js // 将之前的 Some.js 替换为以下代码
import {createBottomTabNavigator} from ‘@react-navigation/bottom-tabs’;
import * as React from ‘react’;
import { View, Button, Text } from ‘react-native’;
const Tab = createBottomTabNavigator(); //
function HomePage() {
return (
<View
style={{
flex: 1,
backgroundColor: ‘#ccc’,
justifyContent: ‘center’,
alignItems: ‘center’,
}}>
<Button
title=“Go to Profile”
onPress={() => navigation.push(‘Login’)}
/>
);
}
function Detail({navigation}) {
return (
<View
style={{
flex: 1,
backgroundColor: ‘#ddd’,
justifyContent: ‘center’,
alignItems: ‘center’,
}}>
);
}
function Mine({navigation}) {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
码笔记领取](https://bbs.csdn.net/topics/618156601)
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
[外链图片转存中…(img-oBVBtwtA-1711201702383)]
【算法合集】
[外链图片转存中…(img-48zgG2Ac-1711201702383)]
【延伸Android必备知识点】
[外链图片转存中…(img-6geg62e6-1711201702384)]
【Android部分高级架构视频学习资源】
Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!