设置app:showAsAction="always"后SearchView仍可折叠问题如何解决
问题成因
app:showAsAction="always"的作用仅为控制整个搜索菜单项始终显示在Toolbar区域,不会被收纳到溢出菜单中,它和SearchView自身的展开/折叠状态没有关联,无法阻止SearchView的内部折叠逻辑。- SearchView自带的关闭按钮默认点击逻辑是系统硬编码的:
- 当搜索框内有输入内容时,点击关闭按钮仅清空输入文本
- 当搜索框内无输入内容时,点击关闭按钮会自动调用
setIconified(true)将SearchView折叠为图标形态,该逻辑不受初始展开配置的影响
- 你仅配置了初始
setIconified(false)让SearchView默认展开,没有拦截关闭按钮的默认点击事件,因此空输入状态下点击叉号就会触发默认折叠行为。
修复方案
你可以通过设置OnCloseListener消费关闭事件,阻止默认折叠行为:
mtSearchDrivers.setOnCloseListener(new SearchView.OnCloseListener() { @Override public boolean onClose() { // 清空输入文本,返回true表示消费该事件,不执行默认折叠逻辑 mtSearchDrivers.setQuery("", false); return true; } });
Kotlin版本写法更简洁:
mtSearchDrivers.setOnCloseListener { mtSearchDrivers.setQuery("", false) true }
内容的提问来源于stack exchange,提问作者Savan Luffy
相关产品推荐
相关产品推荐

