📜  使用 Kotlin 的 Android 底部导航栏

📅  最后修改于: 2022-05-13 01:55:40.158000             🧑  作者: Mango

使用 Kotlin 的 Android 底部导航栏

我们都遇到过具有底部导航栏的应用程序。一些流行的例子包括 Instagram、WhatsApp 等。在本文中,我们将学习使用 Fragments 进行底部导航。我们将通过在 android studio 中制作一个项目来学习它。在这里,我们将使用 Kotlin 作为开发语言。

为什么我们需要底部导航栏?

  • 它允许用户轻松导航到不同的活动/片段。
  • 它使用户了解应用程序中可用的不同屏幕。
  • 用户能够检查他们目前在哪个屏幕上。

下面是底部导航栏的解剖图:

底部导航栏的解剖图

分步实施

第 1 步:创建一个新项目

要在 Android Studio 中创建新项目,请参阅在 kotlin 的 android studio 中创建新项目。

第 2 步:在可绘制对象中添加矢量资源以用作菜单的图标

要添加矢量资产,请转到: app > res > drawable > new(右键单击)> 矢量资产

第 3 步:使用 nav_menu.xml 文件

创建一个菜单目录,然后在弹出菜单的菜单中添加一个新的资源文件。要在 Android Studio 中创建菜单,请参阅此处。这里我们需要添加我们需要在菜单中显示的项目。我们需要指定 id、图标引用和标题。这是nav_menu.xml的代码

XML


    
    
    


XML


  
    
    
  


XML


  
    
    
  


XML


  
    
    
  


Kotlin
package com.ayush.popupmenu
  
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import android.widget.PopupMenu
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.google.android.material.bottomnavigation.BottomNavigationView
import java.lang.Exception
  
class MainActivity : AppCompatActivity() {
  
    lateinit var bottomNav : BottomNavigationView
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        loadFragment(HomeFragment())
        bottomNav = findViewById(R.id.bottomNav) as BottomNavigationView
        bottomNav.setOnNavigationItemReselectedListener {
            when (it.itemId) {
                R.id.home -> {
                    loadFragment(HomeFragment())
                    return@setOnNavigationItemReselectedListener
                }
                R.id.message -> {
                    loadFragment(ChatFragment())
                    return@setOnNavigationItemReselectedListener
                }
                R.id.settings -> {
                    loadFragment(SettingFragment())
                    return@setOnNavigationItemReselectedListener
                }
            }
        }
    }
    private  fun loadFragment(fragment: Fragment){
        val transaction = supportFragmentManager.beginTransaction()
        transaction.replace(R.id.container,fragment)
        transaction.addToBackStack(null)
        transaction.commit()
    }
  
}


第 4 步:对于每个菜单,我们需要创建一个片段。由于有 3 个菜单,所以我们需要创建 3 个片段。要在 Android Studio 中创建片段,请参阅如何在 Android Studio 中创建新片段。所以我们的三个片段是:

  • 家庭片段
  • 菜单片段
  • 设置片段

到目前为止,为了简单起见,我们不会更改 Fragment 的 Kotlin 文件中的任何内容。但是为了区分他们的 UI,我们将更改 XML 文件。

主页片段的 XML 文件:

XML



  
    
    
  

聊天片段的 XML 文件:

XML



  
    
    
  

设置片段的 XML 文件:

XML



  
    
    
  

第 5 步:使用 MainActivity.kt 文件

转到 MainActivity.kt 文件并参考以下代码。下面是 MainActivity.kt 文件的代码。

科特林

package com.ayush.popupmenu
  
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import android.widget.PopupMenu
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.google.android.material.bottomnavigation.BottomNavigationView
import java.lang.Exception
  
class MainActivity : AppCompatActivity() {
  
    lateinit var bottomNav : BottomNavigationView
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        loadFragment(HomeFragment())
        bottomNav = findViewById(R.id.bottomNav) as BottomNavigationView
        bottomNav.setOnNavigationItemReselectedListener {
            when (it.itemId) {
                R.id.home -> {
                    loadFragment(HomeFragment())
                    return@setOnNavigationItemReselectedListener
                }
                R.id.message -> {
                    loadFragment(ChatFragment())
                    return@setOnNavigationItemReselectedListener
                }
                R.id.settings -> {
                    loadFragment(SettingFragment())
                    return@setOnNavigationItemReselectedListener
                }
            }
        }
    }
    private  fun loadFragment(fragment: Fragment){
        val transaction = supportFragmentManager.beginTransaction()
        transaction.replace(R.id.container,fragment)
        transaction.addToBackStack(null)
        transaction.commit()
    }
  
}

所以,我们的应用程序已经准备好了。我们可以看到输出。

输出: