BottomNavigationView 和navigation 的配套使用

1. 相關(guān)庫(kù)的依賴


implementation "com.google.android.material:material:1.4.0"http://MD庫(kù)
//navigation 庫(kù)的依賴
implementation  "androidx.navigation:navigation-fragment:2.1.0"
implementation  "androidx.navigation:navigation-ui:2.1.0"

2. xml 下的文件編寫底部導(dǎo)航欄和navigation的配置



    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu" />


  <!--android:name="androidx.navigation.fragment.NavHostFragment" 這個(gè)是規(guī)定 -->
  <!--app:defaultNavHost="true" 這個(gè)是把控制交給navhost控制 -->
  <!-- app:navGraph="@navigation/graph_navigation"  這個(gè)是navigation 下fragment 的各個(gè)配置及入口 -->
    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="?attr/actionBarSize"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/nav_view"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0"
        app:navGraph="@navigation/mobile_navigation" />



2.1 BottomNavigationView的menu 的配置

在res下新建menu 文件夾 新建菜單文件 bottom_nav_menu.xml

注意:該文件中的item id 要和后面 的 app:navGraph="@navigation/graph_navigation"下的id一致


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/ic_home_black_24dp"
        android:title="@string/title_home" />

    <item
        android:id="@+id/navigation_project"
        android:icon="@drawable/ic_dashboard_black_24dp"
        android:title="@string/title_project" />
    <item
        android:id="@+id/navigation_dashboard"
        android:icon="@drawable/ic_launcher_foreground"
        android:title="@string/title_dashboard" />
</menu>

2.2 fragment的navGraph的配置

在res下新建navigation文件夾 新建菜單文件 graph_navigation.xml


<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mobile_navigation"
    app:startDestination="@+id/navigation_home">

    <fragment
        android:id="@+id/navigation_home"
        android:name="com.tjf.home.HomeFragment"
        android:label="@string/title_home"
        tools:layout="" />

    <fragment
        android:id="@+id/navigation_project"
        android:name="com.tjf.project.ProjectFragment"
        android:label="@string/title_project"
        tools:layout="" />

    <fragment
        android:id="@+id/navigation_dashboard"
        android:name="com.tjf.wan_navigation.NavFragment"
        android:label="@string/title_dashboard"
        tools:layout="" />
</navigation>

3. 在頁(yè)面中的使用

//底部布局的獲取及導(dǎo)航控制器的設(shè)置
val navView = findViewById<BottomNavigationView>(R.id.nav_view)
val navController: NavController =
            Navigation.findNavController(this, R.id.nav_host_fragment)
//進(jìn)行關(guān)聯(lián)
 NavigationUI.setupWithNavController(navView, navController)

//避免選中后再次點(diǎn)擊進(jìn)行重復(fù)創(chuàng)建的監(jiān)聽(tīng)過(guò)濾 
navView.setOnNavigationItemSelectedListener {
            // 避免再次點(diǎn)擊重復(fù)創(chuàng)建
            if (it.isChecked) {
                return@setOnNavigationItemSelectedListener true
            } 
            return@setOnNavigationItemSelectedListener NavigationUI.onNavDestinationSelected(
                it, navController
            )
        }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容