如何禁用底部导航视图的菜单项?

Posted

技术标签:

【中文标题】如何禁用底部导航视图的菜单项?【英文标题】:How to disable menu item of bottom navigation view? 【发布时间】:2020-04-29 04:51:47 【问题描述】:

如何禁用 Material Design 底部导航菜单项?我可以设置.isClickable = false,但这不会将菜单项显示为禁用,类似于按钮。我不能.isEnabled,API不允许。

底部导航视图 XML

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/menu_item_1"
    android:layout_
    android:layout_
    android:layout_gravity="bottom"
    android:background="@color/colorDark"
    app:menu="@menu/bottom_navigation_menu">

菜单 XML

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
      
    <item
        android:id="@+id/action_home"
        android:title="Home"
        android:icon="@drawable/home_button"
        app:showAsAction="ifRoom" />

活动

class Something : AppCompatActivity() 
    private lateinit var mHomeBtn: BottomNavigationItemView
    override fun onCreate(...) 
        mHomeBtn = this.findViewById(R.id.action_home)
        mHomeBtn.isClickable = false  // <--- will make it unable to click but won't show disabled
        mHomeBtn.isEnabled = false    // <--- will throw an error
        mHomeBtn.setOnClickListener(this)
    
    ...

【问题讨论】:

您是否遇到空指针异常? 我没有得到空指针。我想弄清楚如何在禁用时使底部导航菜单项变灰。目前,它会阻止点击它,但它会显示相同的颜色,而不是灰色。 【参考方案1】:

您应该获得BottomNavigationView 的菜单,然后找到并禁用您想要的MenuItem。在代码中可以如下完成

override fun onCreate(savedInstanceState: Bundle?) 
    // Find the bottom navigation view, (Use correct ID)
    // menu_item_1 is probably not a good ID for a navigation view
    val navView: BottomNavigationView = findViewById(R.id.nav_view)

    // Find the menu item and then disable it
    navView.menu.findItem(R.id.navigation_home).isEnabled = false

【讨论】:

这个“工作”与 .isClickable=false 类似,但它不会显示我的菜单项已禁用。如何显示禁用的菜单项?同样,如果一个按钮被禁用,它会如何显示为“灰色”。 此代码禁用菜单项,将其颜色更改为灰色。如果颜色没有变化,则意味着您已将某些颜色属性从默认值修改为某些自定义设置。可能是背景颜色【参考方案2】:

添加到mightyWOZ的答案

navView.menu.findItem(R.id.navigation_home).isCheckable = false

这会使菜单项禁用(灰色)。

【讨论】:

以上是关于如何禁用底部导航视图的菜单项?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式膨胀底部导航视图菜单

将三角形指针添加到导航项/菜单底部的中心

带有圆形按钮的Android底部导航

案例JS+CSS3底部下划线导航菜单代码

底部导航 如何从片段内部更改片段

在底部导航视图中设置最初选择的项目索引/id