【发布时间】:2017-09-13 08:42:36
【问题描述】:
我的工具栏里面有一个searchView,两者都没有在 android 4.3 上注册任何触摸事件(实际上该事件转到它们下方的视图)。它应该注册homeAsUp、searchView 字段 (requestFocus) 和 X 按钮以清除该字段。现在我在想的是把听众附加到这些上,但有没有更好的方法。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
MenuItem menuItem = menu.findItem(R.id.app_bar_search);
SearchView searchView = new SearchView(this);
searchView.setIconifiedByDefault(false);
searchView.setIconified(false);
searchView.requestFocus();
searchView.setMaxWidth(Integer.MAX_VALUE);
searchView.setQueryHint(getString(R.string.search));
ImageView searchViewIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
ViewGroup linearLayoutSearchView =(ViewGroup) searchViewIcon.getParent();
linearLayoutSearchView.removeView(searchViewIcon);
menuItem.setActionView(searchView);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) { return false; }
@Override
public boolean onQueryTextChange(String newText) {
presenter.queryChanged(newText);
return true;
}
});
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search, menu);
return true;
}
菜单/search.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/app_bar_search"
app:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@drawable/ic_search_white_24dp"
android:title="@string/search"
app:showAsAction="always" />
</menu>
它在较新的版本中运行良好(不知道哪个是工作/不工作之间的边界)。
编辑: 将侦听器附加到搜索视图也不起作用。
【问题讨论】:
-
所以当您在
SearchView中输入任何内容时,根本不会调用onQueryTextChange? -
已调用但未注册触摸事件。我不能回去。当我隐藏键盘时,我无法让它再次弹出。
-
SearchView在new SearchView(...)中使用的是什么?来自android.support.v7? -
是的 android.support.v7.widget.SearchView
-
试过
android.widget.SearchView?顺便说一句,我同意 Divy Soni 的解决方案,它应该可以这样工作
标签: java android toolbar searchview