You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android导航抽屉可正常开关但菜单项不显示,求技术解决方案

问题描述

为App添加Navigation Drawer后,抽屉可正常开关,但无任何菜单项显示,相关代码如下:

主布局XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawableLayout"
    tools:context=".MainActivity">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/customToolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        />

    <LinearLayout...> <!--This linear layout has all the elements of UI.-->

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navigationView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:menu="@menu/navigation_items"
        android:backgroundTint="@color/purple_500"
        />

</androidx.drawerlayout.widget.DrawerLayout>

菜单项XML(res/menu/navigation_items.xml)

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

    <item android:id="@+id/homeMenu"
        android:title="Home"
        android:icon="@drawable/ic_home_menu_icon"/>

    <item android:id="@+id/signUpMenu"
        android:title="Sign Up"
        android:icon="@drawable/ic_signup" />

    <item android:id="@+id/loginMenu"
        android:title="Login"
        android:icon="@drawable/ic_lock_open" />

</menu>

MainActivity代码

class MainActivity : AppCompatActivity(){

    private var actionBarDrawerToggle: ActionBarDrawerToggle? = null

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


        actionBarDrawerToggle =    ActionBarDrawerToggle(this,drawableLayout,customToolbar,R.string.open,R.string.close)
        drawableLayout.addDrawerListener(actionBarDrawerToggle!!)
        actionBarDrawerToggle!!.syncState()

        setSupportActionBar(customToolbar)
        supportActionBar!!.title = ""
        supportActionBar!!.setDisplayHomeAsUpEnabled(true)

        navigationView.setNavigationItemSelectedListener{
            when(it.itemId){
                R.id.homeMenu -> Toast.makeText(this@MainActivity, "Home clicked", Toast.LENGTH_SHORT).show()
                R.id.signUpMenu -> Toast.makeText(this@MainActivity, "SignUP clicked", Toast.LENGTH_SHORT).show()
                R.id.loginMenu -> Toast.makeText(this@MainActivity, "Login clicked", Toast.LENGTH_SHORT).show()
            }
            true
        }
    }
}

自定义Toolbar主题

<style name="Theme.CustomToolbarTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="colorPrimary">@color/purple_500</item>
    <item name="colorPrimaryVariant">@color/purple_700</item>
    <item name="colorOnPrimary">@color/white</item>

</style>

解决方案

以下是几个直接的排查和修复步骤:

  • 修复主布局的层级与标签问题
    主布局中LinearLayout未闭合,且它作为DrawerLayout的主内容区域,必须是第一个子View且布局完整,否则可能覆盖NavigationView。修正后的LinearLayout示例:

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <!-- 你的UI元素 -->
    </LinearLayout>
    
  • 解决颜色冲突问题
    NavigationView背景为@color/purple_500,如果菜单项文字、图标颜色与背景接近,会导致视觉上不可见。可直接在NavigationView中显式设置颜色:

    <com.google.android.material.navigation.NavigationView
        ...
        app:itemTextColor="@color/white"
        app:itemIconTint="@color/white"
        />
    

    也可在主题中统一配置:

    <style name="Theme.CustomToolbarTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        ...
        <item name="android:textColorPrimary">@color/white</item>
        <item name="colorOnSurface">@color/white</item>
    </style>
    
  • 验证menu文件的正确性
    确认navigation_items.xml放在res/menu/目录下,文件名、路径无拼写错误(区分大小写)。

  • 检查Material Components依赖
    确保Module级别的build.gradle中添加了Material Components库依赖:

    implementation 'com.google.android.material:material:1.9.0' // 可替换为最新版本
    
  • 调整ActionBarDrawerToggle初始化顺序
    先设置Toolbar为ActionBar,再初始化DrawerToggle,避免顺序异常:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    
        // 先配置Toolbar
        setSupportActionBar(customToolbar)
        supportActionBar?.title = ""
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
    
        // 再初始化DrawerToggle
        actionBarDrawerToggle = ActionBarDrawerToggle(this, drawableLayout, customToolbar, R.string.open, R.string.close)
        drawableLayout.addDrawerListener(actionBarDrawerToggle!!)
        actionBarDrawerToggle!!.syncState()
    
        // 其余代码...
    }
    

内容的提问来源于stack exchange,提问作者Akash Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:31:00