Toolbar样式配置求助:导航抽屉上层透明Toolbar的三项需求
我来帮你搞定这几个头疼的小问题,都是Toolbar和NavDrawer配合时常见的坑,一步步来:
1. 把汉堡菜单和选项菜单图标改成白色
有两种简单的方式:
- 布局里直接设置主题:给你的Toolbar加上
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar",这样系统会自动把图标和文字设为白色,不用额外写代码。<androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@android:color/transparent" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> - 代码里手动设置颜色:如果布局设置不生效,直接在代码里给DrawerToggle和选项菜单加颜色滤镜:
// 给汉堡菜单设置白色 ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open_drawer, R.string.close_drawer); toggle.getDrawerArrowDrawable().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP); // 给选项菜单图标设置白色 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.your_menu, menu); for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); Drawable icon = item.getIcon(); if (icon != null) { icon.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP); } } return true; }
2. 确保Toolbar显示在NavDrawer上层
这是布局层级的问题,两种思路任选:
- 调整布局顺序 + 层级优先级:在DrawerLayout里,把Toolbar作为独立的直接子View放在NavDrawer的后面(ViewGroup中子View顺序越靠后,层级越高),同时给主内容区域加上顶部padding避免被Toolbar挡住:
<androidx.drawerlayout.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 主内容区域 --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="?attr/actionBarSize"> <!-- 你的页面内容 --> </LinearLayout> <!-- 透明Toolbar --> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@android:color/transparent" android:layout_gravity="top"/> <!-- 导航抽屉 --> <com.google.android.material.navigation.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start"/> </androidx.drawerlayout.widget.DrawerLayout> - 用elevation强制层级:如果不想改布局结构,给Toolbar设置比NavDrawer更高的elevation值(默认NavDrawer的elevation是8dp,设成16dp就能确保在上方):
<androidx.appcompat.widget.Toolbar ... android:elevation="16dp"/>
3. 移除Toolbar的阴影效果
这个最简单,直接给Toolbar设置elevation为0即可:
<androidx.appcompat.widget.Toolbar ... app:elevation="0dp"/>
或者在代码里动态设置:
toolbar.setElevation(0f);
内容的提问来源于stack exchange,提问作者Morgan
相关产品推荐
相关产品推荐

