Android-Jetpack从入门到精通(深度好文,值得收藏)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,Android Jetpack学习之旅就开始了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本人打算每周学习一个组件(上图的左上区域),最后将所学的组件组成一个简单的Demo。同时,刚刚过去的2019年谷歌开发者大会宣布亲儿子Kotlin成为开发Android的首选语言,所以本文的Demo也将都会采用Kotlin编写。

本章结束后登录部分完成效果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

语言:Kotlin
Demo地址:https://github.com/mCyp/Hoo

目录

一、简介

1. 定义

Navigation是什么呢?谷歌的介绍视频上说:

Navigation是一个可简化Android导航的库和插件

更确切的来说,Navigation是用来管理Fragment的切换,并且可以通过可视化的方式,看见App的交互流程。这完美的契合了Jake Wharton大神单Activity的建议。

2. 优点
  • 处理Fragment的切换(上文已说过)
  • 默认情况下正确处理Fragment的前进和后退
  • 为过渡和动画提供标准化的资源
  • 实现和处理深层连接
  • 可以绑定ToolbarBottomNavigationViewActionBar
  • SafeArgs(Gradle插件) 数据传递时提供类型安全性
  • ViewModel支持
3. 准备

如果想要进行下面的学习,你需要 3.2 或者更高的Android studio

4. 学习方式

最好的学习方式仍然是通过官方文档,下面是官方的学习地址:
谷歌官方教程:Navigation Codelab
谷歌官方文档:Navigation
官方Demo:Demo地址

二、实战

在实战之前,我们先来了解一下Navigation中最关键的三要素,他们是:

名词解释
Navigation Graph(New XML resource)如我们的第一张图所示,这是一个新的资源文件,用户在可视化界面可以看出他能够到达的Destination(用户能够到达的屏幕界面),以及流程关系。
NavHostFragment(Layout XML view)当前Fragment的容器
NavController(Kotlin/Java object)导航的控制者

可能我这么解释还是有点抽象,做一个不是那么恰当的比喻,我们可以将Navigation Graph看作一个地图,NavHostFragment看作一个车,以及把NavController看作车中的方向盘,Navigation Graph中可以看出各个地点(Destination)和通往各个地点的路径,NavHostFragment可以到达地图中的各个目的地,但是决定到什么目的地还是方向盘NavController,虽然它取决于开车人(用户)。

第一步 添加依赖

模块层的build.gradle文件需要添加:

ext.navigationVersion = “2.0.0”
dependencies {
//…
implementation “androidx.navigation:navigation-fragment-ktx: r o o t P r o j e c t . n a v i g a t i o n V e r s i o n " i m p l e m e n t a t i o n " a n d r o i d x . n a v i g a t i o n : n a v i g a t i o n − u i − k t x : rootProject.navigationVersion" implementation "androidx.navigation:navigation-ui-ktx: rootProject.navigationVersion"implementation"androidx.navigation:navigationuiktx:rootProject.navigationVersion”
}

如果你要使用SafeArgs插件,还要在项目目录下的build.gradle文件添加:

buildscript {
ext.navigationVersion = “2.0.0”
dependencies {
classpath “androidx.navigation:navigation-safe-args-gradle-plugin:$navigationVersion”
}
}

以及模块下面的build.gradle文件添加:

apply plugin: ‘kotlin-android-extensions’
apply plugin: ‘androidx.navigation.safeargs’

第二步 创建navigation导航
  1. 创建基础目录:资源文件res目录下创建navigation目录 -> 右击navigation目录New一个Navigation resource file
  2. 创建一个Destination,如果说navigation是我们的导航工具,Destination是我们的目的地,在此之前,我已经写好了一个WelcomeFragmentLoginFragmentRegisterFragment,添加Destination的操作完成后如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

除了可视化界面之外,我们仍然有必要看一下里面的内容组成,login_navigation.xml:

<navigation

android:id=“@+id/login_navigation”
app:startDestination=“@id/welcome”>


<action
…/>
<action
…/>

<fragment
android:id=“@+id/register”
android:name=“com.joe.jetpackdemo.ui.fragment.login.RegisterFragment”
android:label=“LoginFragment”
tools:layout=“@layout/fragment_register”

<argument
…/>

我在这里省略了一些不必要的代码。让我们看一下navigation标签的属性:

属性解释
app:startDestination默认的起始位置
第三步 建立NavHostFragment

我们创建一个新的LoginActivity,在activity_login.xml文件中:

<androidx.constraintlayout.widget.ConstraintLayout
…>

</androidx.constraintlayout.widget.ConstraintLayout>

有几个属性需要解释一下:

属性解释
android:name值必须是androidx.navigation.fragment.NavHostFragment,声明这是一个NavHostFragment
app:navGraph存放的是第二步建好导航的资源文件,也就是确定了Navigation Graph
app:defaultNavHost="true"与系统的返回按钮相关联
第四步 界面跳转、参数传递和动画

WelcomeFragment中,点击登录和注册按钮可以分别跳转到LoginFragmentRegisterFragment中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里我使用了两种方式实现:

方式一 利用ID导航

目标:WelcomeFragment携带keyname的数据跳转到LoginFragmentLoginFragment接收后显示。
Have a account ? Login按钮的点击事件如下:

btnLogin.setOnClickListener {
// 设置动画参数
val navOption = navOptions {
anim {
enter = R.anim.slide_in_right
exit = R.anim.slide_out_left
popEnter = R.anim.slide_in_left
popExit = R.anim.slide_out_right
}
}
// 参数设置
val bundle = Bundle()
bundle.putString(“name”,“TeaOf”)
findNavController().navigate(R.id.login, bundle,navOption)
}

后续LoginFragment的接收代码比较简单,直接获取Fragment中的Bundle即可,这里不再出示代码。最后的效果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方式二 利用Safe Args

目标:WelcomeFragment通过Safe Args将数据传到RegisterFragmentRegisterFragment接收后显示。
再看一下已经展示过的login_navigation.xml

<navigation
…>

<fragment

/>

<fragment
android:id=“@+id/welcome”



<fragment
android:id=“@+id/register”

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

总结:

面试是一个不断学习、不断自我提升的过程,有机会还是出去面面,至少能想到查漏补缺效果,而且有些知识点,可能你自以为知道,但让你说,并不一定能说得很好。

有些东西有压力才有动力,而学到的知识点,都是钱(因为技术人员大部分情况是根据你的能力来定级、来发薪水的),技多不压身。

附上我的面试各大专题整理: 面试指南,满满的都是干货,希望对大家有帮助!

…(img-d9PRSQ6e-1712069723101)]

总结:

面试是一个不断学习、不断自我提升的过程,有机会还是出去面面,至少能想到查漏补缺效果,而且有些知识点,可能你自以为知道,但让你说,并不一定能说得很好。

有些东西有压力才有动力,而学到的知识点,都是钱(因为技术人员大部分情况是根据你的能力来定级、来发薪水的),技多不压身。

附上我的面试各大专题整理: 面试指南,满满的都是干货,希望对大家有帮助!
[外链图片转存中…(img-OWiDn4VP-1712069723101)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值