如何移除Fragment中Toolbar的溢出菜单(三点图标)
嘿,我来帮你搞定这个问题~你遇到的情况是移动端屏幕空间有限时,系统可能会自动调整菜单的显示逻辑,哪怕你已经设置了app:showAsAction="always",而平板屏幕足够宽,所以能正常只显示搜索图标。下面给你几个可行的解决方案:
1. 代码里强制锁定菜单显示方式
在Fragment的onCreateOptionsMenu方法中,找到搜索菜单项,直接强制它始终显示在Toolbar上,跳过系统的自动判断:
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.actionbar_menu, menu) // 强制让搜索图标一直显示在Toolbar上 val searchItem = menu.findItem(R.id.search) searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS) super.onCreateOptionsMenu(menu, inflater) }
2. 排查Activity是否有额外菜单
如果你的Fragment所在的Activity也重写了onCreateOptionsMenu,系统会把Fragment和Activity的菜单合并到一起。要是Activity里藏着其他菜单项,就会触发溢出菜单。你可以先注释掉Activity的onCreateOptionsMenu代码,测试下是不是这个原因。
3. 优化Menu XML配置
虽然你已经加了app:showAsAction="always",可以尝试同时补上android:showAsAction="always"来兼容不同场景,另外把tools:ignore="AlwaysShowAction"去掉(这个只是忽略Lint警告,不影响实际运行,去掉后配置更清晰):
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/search" android:icon="@drawable/search" android:title="Search" android:showAsAction="always" app:showAsAction="always" /> </menu>
4. 检查主题配置
确保你的Activity用的是不带默认ActionBar的主题,比如Theme.MaterialComponents.DayNight.NoActionBar,然后手动把Toolbar设置为ActionBar:
// 在Activity的onCreate方法里 val toolbar = findViewById<Toolbar>(R.id.toolbar) setSupportActionBar(toolbar)
要是用了默认带ActionBar的主题,可能会有系统默认的元素干扰菜单显示。
先试试第一种方案,通常这就能快速解决问题啦~如果还是不行,再依次排查后面的步骤。
内容的提问来源于stack exchange,提问作者Anju

