Android Navigation 组件(进阶篇)

本文深入探讨了Android Navigation组件的高级用法,包括如何使用NavigationUI更新顶部应用栏、抽屉式导航栏和底部导航栏。讲解了Toolbar、CollapsingToolbarLayout的配置,并阐述了如何在不同界面之间共享数据利用ViewModel。此外,提到了与NavigationView和BottomNavigationView的集成,确保菜单项与导航图中的fragment id匹配,以实现无缝导航。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用 NavigationUI 更新界面组件

Navigation 组件包含 NavigationUI 类。此类包含使用顶部应用栏、抽屉式导航栏和底部导航栏管理导航的静态方法。

可参阅:
Android Material 常用组件详解(七)—— BottomNavigationView 使用详解
Android Material 常用组件详解(九)—— NavigationView 使用详解
Android Material 常用组件详解(十)—— ToolBar、AppBarLayout、CoordinatorLayout、CollapsingToolbarLayout 使用详解

1.1 顶部应用栏

顶部应用栏在应用顶部提供了一个固定位置,用于显示当前屏幕的信息和操作。如需详细了解应用栏,请参阅设置应用栏
在这里插入图片描述

NavigationUI 包含在用户浏览您的应用时自动更新顶部应用栏中内容的方法。例如,NavigationUI 使用导航图中的目的地标签android:label及时更新顶部应用栏的标题,即应用栏的标题会显示与之对应的android:label内容。

<navigation>
    <fragment ...
              android:label="Page title">
      ...
    </fragment>
</navigation>

NavigationUI 支持以下顶部应用栏类型:

  • Toolbar
  • CollapsingToolbarLayout
  • ActionBar

Toolbar

NavigationUI 使用 AppBarConfiguration 对象管理在应用显示区域左上角的导航按钮行为。导航按钮的行为会根据用户是否位于顶级目的地而变化。
当用户位于顶级目的地时,如果目的地使用 DrawerLayout,导航按钮会变为抽屉式导航栏图标在这里插入图片描述 。如果目的地没有使用 DrawerLayout,导航按钮处于隐藏状态。当用户位于任何其他目的地上时,导航按钮会显示为向上按钮 在这里插入图片描述

<LinearLayout>
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar" />
     <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        ... />
    ...
</LinearLayout>
        val navController = findNavController(R.id.nav_host_fragment)
        val appBarConfiguration = AppBarConfiguration(navController.graph)
//        val appBarConfiguration = AppBarConfiguration(setOf( R.id.fragmentA, R.id.fragmentB, R.id.fragmentC))
        toolbar.setupWithNavController(navController, appBarConfiguration)

CollapsingToolbarLayout

<LinearLayout>
    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/tall_toolbar_height">

        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleGravity="top"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"/>
        </com.google.android.material.appbar.CollapsingToolbarLayout>
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/nav_host_fragment"
        ... />
    ...
</LinearLayout>
override fun onCreate(savedInstanceState: Bundle?) {
   
    setContentView(R.layout.activity_main)
    
    val layout = findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar_layout)
    val toolbar = findViewById<Toolbar>(R.id.toolbar)
    
    val navController = findNavController(R.id.nav_host_fragment)
    val appBarConfiguration = AppBarConfiguration(navController.graph)
    layout.setupWithNavController(toolbar, navController, appBarConfiguration)
}

默认应用栏

如需向默认操作栏添加导航支持,请通过主 Activity 的 onCreate() 方法调用 setupActionBarWithNavController(),如下所示。请注意,您需要在 onCreate() 之外声明 AppBarConfiguration,因为您在替换 onSupportNavigateUp() 时也使用该方法:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值