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

4
我如何禁用 Material Design 底部导航菜单项?我可以设置 .isClickable = false,但这不会将该菜单项显示为已禁用,类似于按钮。我不能使用 .isEnabled,因为 API 不允许这样做。
BottomNavigationView XML
<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/menu_item_1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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)
    }
    ...

你是否遇到了空指针异常? - mightyWOZ
我没有收到空指针。我正在尝试弄清楚如何在禁用时将底部导航菜单项变灰。目前,它会防止点击,但显示的颜色相同,没有变灰。 - EvOlaNdLuPiZ
2个回答

15
您应该获取您的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
}

这个“worked”的效果类似于.isClickable=false,但它不会显示我的菜单项已禁用。我该如何显示已禁用的菜单项?就像按钮如果被禁用了会显示为“灰色”。 - EvOlaNdLuPiZ
2
这段代码禁用菜单项,这将使其颜色变为灰色。如果颜色没有改变,那就意味着您已将某些颜色属性从默认设置修改为某些自定义设置。可能是背景颜色。 - mightyWOZ

1
增补mightyWOZ的回答。
navView.menu.findItem(R.id.navigation_home).isCheckable = false

这会使菜单项变为禁用状态(灰色)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接