使用NavigationUI更新UI组件

如果要自定义哪些目标被视为顶级目标,则可以将一组目标ID传递给构造函数,如下所示:

val appBarConfiguration = AppBarConfiguration(setOf(R.id.main, R.id.android))

###四 创建工具栏

要创建工具栏NavigationUI,首先在主活动中定义栏,如下所示:

接下来,setupWithNavController()) 从您的主要活动的onCreate()方法调用,如下所示:

override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)

val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
findViewById(R.id.toolbar)
.setupWithNavController(navController, appBarConfiguration)
}

#####注意:使用a时Toolbar,导航会自动处理“导航”按钮的单击事件,因此您无需覆盖onSupportNavigateUp()。
###包括CollapsingToolbarLayout
要CollapsingToolbarLayout在工具栏中添加a ,请先在主要活动中定义工具栏和周围布局,如下所示:

接下来,setupWithNavController() 从您的主要活动的onCreate方法调用,如下所示

override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)

val layout = findViewById(R.id.collapsing_toolbar_layout)
val toolbar = findViewById(R.id.toolbar)
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
layout.setupWithNavController(toolbar, navController, appBarConfiguration)
}

###四 行动吧
要使用默认操作栏包含导航支持,请setupActionBarWithNavController() 从主活动的onCreate()方法中调用 ,如下所示。请注意,您需要声明您的AppBarConfiguration外部onCreate(),因为您在覆盖时也使用它onSupportNavigateUp():

private lateinit var appBarConfiguration: AppBarConfiguration

override fun onCreate(savedInstanceState: Bundle?) {

val navController = findNavController(R.id.nav_host_fragment)
appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
}

接下来,覆盖onSupportNavigateUp()以处理向上导航:

override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}

###五 将目的地绑定到菜单项
NavigationUI还提供了将目标绑定到菜单驱动的UI组件的帮助程序。NavigationUI包含一个辅助方法,onNavDestinationSelected()它MenuItem与NavController托管关联目标的方法 一起使用 。如果id在的MenuItem比赛的id目标时,NavController可以然后导航到目的地。

作为一个例子,下面的XML片断定义一个菜单项,并具有共同的目的地id,details_page_fragment:

<?xml version="1.0" encoding="utf-8"?>

<navigation xmlns:app=“http://schemas.android.com/apk/res-auto”
xmlns:tools=“http://schemas.android.com/tools”
xmlns:android=“http://schemas.android.com/apk/res/android”
… >


...

onCreateOptionsMenu()例如,如果您的菜单是通过活动添加的,则可以通过覆盖onOptionsItemSelected()要呼叫的活动来将菜单项与目的地相关联onNavDestinationSelected(),如下所示:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
val navController = findNavController(R.id.nav_host)
return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)
}

现在,当用户单击details_page_fragment菜单项时,应用程序会自动导航到相应的目标位置id。
###六 添加导航抽屉

导航抽屉是一个UI面板,显示应用程序的主导航菜单。当用户触摸

000121.jpg
应用栏中的抽屉图标或用户从屏幕的左边缘滑动手指时,抽屉出现 。2图.png
抽屉图标显示在使用a的所有顶级目标上DrawerLayout。顶级目标是应用程序的根级目标。它们不会在应用栏中显示“向上”按钮。

要添加导航抽屉,请先将a声明 DrawerLayout为根视图。在其中DrawerLayout,添加主UI内容的布局和包含导航抽屉内容的另一个视图。

例如,以下布局使用DrawerLayout带有两个子视图:a NavHostFragment用于包含主要内容,a NavigationView 用于包含 导航抽屉的内容。

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.DrawerLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:app=“http://schemas.android.com/apk/res-auto”
android:id=“@+id/drawer_layout”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:fitsSystemWindows=“true”>

<android.support.design.widget.NavigationView
android:id=“@+id/nav_view”
android:layout_width=“wrap_content”
android:layout_height=“match_parent”
android:layout_gravity=“start”
android:fitsSystemWindows=“true” />
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

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

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

img

img

img

img

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

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结

作为一名从事Android的开发者,很多人最近都在和我吐槽Android是不是快要凉了?而在我看来这正是市场成熟的表现,所有的市场都是温水煮青蛙,永远会淘汰掉不愿意学习改变,安于现状的那批人,希望所有的人能在大浪淘沙中留下来,因为对于市场的逐渐成熟,平凡并不是我们唯一的答案!

资料.png
资料图.jpg

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

g-BmgMBO5I-1713513404445)]
[外链图片转存中…(img-7mbrgfbU-1713513404446)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值