展开模式下的 SearchView 不会隐藏从 Marshmallow 开始的所有操作栏图标
SearchView in expanded mode doesn't hide all action bar icons starting from Marshmallow
SearchView 在 Lollipop 设备上看起来不错 (Android 21):
但是在 Android 23-28 上它不会隐藏右侧的所有图标:
<item android:id="@+id/action_search"
android:title="@string/search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom"/>
<item android:id="@+id/action_sort"
android:title="@string/sorting"
android:icon="@drawable/sort"
app:showAsAction="ifRoom"/>
我该如何解决?
更新
似乎Android 23 及以上不再隐藏右侧的图标(因为有足够的space)
但只有在左侧没有主页按钮或汉堡菜单时它才能正常工作:
但我的左侧有一个图标,这就是为什么当 SearchView 展开时我的操作栏看起来很难看:
应该是最新 Android ActionBar 设计中的错误...
我这样添加菜单按钮:
supportActionBar?.let {
it.setDisplayHomeAsUpEnabled(true)
it.setHomeAsUpIndicator(R.drawable.ic_menu)
}
我的解决方案是在展开 SearchView
时以编程方式隐藏左侧 (home/menu) 的按钮:
val searchItem = menu.findItem(R.id.action_search)
val searchView = searchItem.actionView as SearchView
searchView?.setOnSearchClickListener {
supportActionBar?.setDisplayHomeAsUpEnabled(false)
}
searchView?.setOnCloseListener {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
false
}
p.s。下一个方法对我不起作用,因为它仅在您的 SearchView 始终展开(标记为 collapseActionView
)时才有效,但我不想在我的应用程序中出现这种奇怪的东西(它不是搜索应用程序,搜索功能是只是一个附加功能):
searchItem.setOnActionExpandListener(object: MenuItem.OnActionExpandListener {
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
supportActionBar?.setDisplayHomeAsUpEnabled(false)
return true
}
override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
return true
}
})
关闭:
展开:
SearchView 在 Lollipop 设备上看起来不错 (Android 21):
但是在 Android 23-28 上它不会隐藏右侧的所有图标:
<item android:id="@+id/action_search"
android:title="@string/search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom"/>
<item android:id="@+id/action_sort"
android:title="@string/sorting"
android:icon="@drawable/sort"
app:showAsAction="ifRoom"/>
我该如何解决?
更新
似乎Android 23 及以上不再隐藏右侧的图标(因为有足够的space)
但只有在左侧没有主页按钮或汉堡菜单时它才能正常工作:
但我的左侧有一个图标,这就是为什么当 SearchView 展开时我的操作栏看起来很难看:
应该是最新 Android ActionBar 设计中的错误...
我这样添加菜单按钮:
supportActionBar?.let {
it.setDisplayHomeAsUpEnabled(true)
it.setHomeAsUpIndicator(R.drawable.ic_menu)
}
我的解决方案是在展开 SearchView
时以编程方式隐藏左侧 (home/menu) 的按钮:
val searchItem = menu.findItem(R.id.action_search)
val searchView = searchItem.actionView as SearchView
searchView?.setOnSearchClickListener {
supportActionBar?.setDisplayHomeAsUpEnabled(false)
}
searchView?.setOnCloseListener {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
false
}
p.s。下一个方法对我不起作用,因为它仅在您的 SearchView 始终展开(标记为 collapseActionView
)时才有效,但我不想在我的应用程序中出现这种奇怪的东西(它不是搜索应用程序,搜索功能是只是一个附加功能):
searchItem.setOnActionExpandListener(object: MenuItem.OnActionExpandListener {
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
supportActionBar?.setDisplayHomeAsUpEnabled(false)
return true
}
override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
return true
}
})
关闭:
展开: