Android JetPack navigation 结合 BottomNavigationView 组件使用

Android JetPack navigation 结合 BottomNavigationView 组件使用

简要说一下流程

1. 添加依赖

在build.gradle文件中添加:

ext.navigationVersion = "2.0.0"
dependencies {
    //... 
    implementation "androidx.navigation:navigation-fragment-ktx:$rootProject.navigationVersion"
    implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"
}

还需在build.gradle中添加:

apply plugin: 'kotlin-android-extensions'
apply plugin: 'androidx.navigation.safeargs'

2. 添加navigation

在res目录下创建navigation目录,在navigation下新建main_navigation.xml资源文件

点击图片中圈中的加号,即可添加destination
点击图片中圈中的加号,即可添加destination

3. 接下来新建main_activity.xml



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	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:orientation="vertical"
	android:layout_width="match_parent"
	android:background="@color/norm_grey"
	android:layout_height="match_parent"
	tools:context=".ui.activity.MainActivity">

	<androidx.appcompat.widget.Toolbar
		android:id="@+id/toolbar"
		android:layout_width="match_parent"
		android:layout_height="52dp"
		android:background="@color/colorPrimary"
		app:titleTextColor="#ffffff">

		<LinearLayout
			android:layout_width="match_parent"
			android:layout_height="52dp"
			android:orientation="horizontal">

			<TextView
				android:layout_width="wrap_content"
				android:layout_height="match_parent"
				android:textSize="24sp"
				android:padding="4dp"
				android:gravity="center"
				android:textColor="#ffffff"
				android:textStyle="bold"
				android:text="Hoo"/>

			<Space
				android:layout_width="0dp"
				android:layout_height="match_parent"
				android:layout_weight="1"/>

			<ImageView
				android:id="@+id/iv_camera"
				android:layout_width="52dp"
				android:layout_height="52dp"
				android:padding="14dp"
				android:src="@drawable/me_ic_camera"/>

		</LinearLayout>

	</androidx.appcompat.widget.Toolbar>

	<fragment
		android:id="@+id/my_nav_host_fragment"
		android:name="androidx.navigation.fragment.NavHostFragment"
		android:layout_width="match_parent"
		app:navGraph="@navigation/main_navigation"
		app:defaultNavHost="true"
		android:layout_height="0dp"
		android:layout_marginBottom="10dp"
		android:layout_weight="1"/>

	<com.google.android.material.bottomnavigation.BottomNavigationView
		android:id="@+id/bnv_view"
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:background="@android:color/white"
		app:itemIconTint="@drawable/main_bottom_color_selector"
		app:itemTextColor="@drawable/main_bottom_color_selector"
		app:menu="@menu/menu_main"/>

</LinearLayout>


如下所示,在箭头指向的地方,添加对应的navigation资源文件
在这里插入图片描述

4. 创建MainActivity.kt文件

package com.joe.jetpackdemo.ui.activity

import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.databinding.DataBindingUtil
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.setupWithNavController
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.joe.jetpackdemo.R

class MainActivity : AppCompatActivity() {

    lateinit var bottomNavigationView: BottomNavigationView
    lateinit var mToolbar:Toolbar
    lateinit var mCamera:ImageView

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

        val host: NavHostFragment = supportFragmentManager.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment
        val navController = host.navController

        initWidget()
        initBottomNavigationView(bottomNavigationView,navController)
    }

    /**
     * Navigation绑定bottomNavigationView
     */
    private fun initBottomNavigationView(bottomNavigationView: BottomNavigationView, navController: NavController) {
        bottomNavigationView.setupWithNavController(navController)
        navController.addOnDestinationChangedListener { controller, destination, arguments ->
            when(destination.id){
                R.id.meFragment -> {
                    mCamera.visibility = View.VISIBLE
                    Log.d("navigation", "meFragment------->>>")
                }
                R.id.infoFragment -> {
                    Log.d("navigation", "infoFragment------->>>")
                }
                else -> {
                    mCamera.visibility = View.GONE
                    Log.d("navigation", "marketFragment------->>>")
                }
            }
        }
    }

    private fun initWidget() {
        bottomNavigationView = findViewById(R.id.bnv_view)
        mToolbar = findViewById(R.id.toolbar)
        mCamera = findViewById(R.id.iv_camera)

        mCamera.setOnClickListener {
            // TODO CameraX 学习
        }
    }


}

如下图所示,圈起来为重点。
在这里插入图片描述
主要实现了navigation绑定bottomNavigationView。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值