我在Android开发人员的Searchview上过得很不好。
我正在尝试在工具栏的应用中实现Searchview。目前,它运行良好,但是当我旋转设备时,搜索视图的行为异常。
我的目标是坚持查询文本,以此类推“ OnCreateOptionsMenu”
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_funcionarios_toolbar, menu);
clearSearchItem = menu.findItem(R.id.botao_limpar_busca);
searchItem = menu.findItem(R.id.botao_buscar);
searchItem.setIcon(new IconicsDrawable(getContext(), MaterialDesignIconic.Icon.gmi_search).sizeDp(24));
searchView = (SearchView) searchItem.getActionView();
searchView.setMaxWidth(Integer.MAX_VALUE);
searchView.setOnQueryTextListener(searchViewTextListener);
searchView.post(new Runnable() {
@Override
public void run() {
if (!mQuery.equals("")) {
searchView.setQuery(mQuery,false);
}
}
});
if (mQuery != null & !mQuery.equals("")) {
searchItem.expandActionView();
}
}
但是如果我使用.expandActionView(),则在旋转后(并使用SearchView提供的“ X”按钮清理字段),MenuItem变成了这三个小点,没有任何动作。要恢复以前的行为,我必须再次旋转设备。
我几乎可以确定问题出在我的XML上:
<item
android:id="@+id/botao_buscar"
android:title="@string/menu_buscar"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"/>
将“ showAsAction”属性更改为“ always”就像一种魅力。
对此有何想法?
为了克服showAsAction="always"
产生的难看的搜索栏,我采用这种方式解决(保留showAsAction="collapseActionView|ifRoom"
):
public boolean onCreateOptionsMenu(Menu menu) {
...
if (!TextUtils.isEmpty(mQuery))
new Handler().post(() -> {
searchView.clearFocus();
searchView.setIconified(false);
searchItem.expandActionView();//or MenuItemCompat.expandActionView for older devices
searchView.setQuery(mQuery, false);//or true here if you want it submitted!
});
}
技巧是在searchItem.expandActionView()
之后调用searchView.setIconfied(false)
。
为了提高稳定性,我像您一样将整个序列保存在post
中,但是让new Handler()
看起来似乎更好。
最后,我在以下站点找到了一个解决方案:LINK。 (非常感谢您发表这篇文章。)
我将代码复制到这里,因为它可能是一个依赖项。
<item
android:id="@+id/menu_main_action_search"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/menu_main_search_title"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView" />
代码:
searchMenuItem.expandActionView();
mSearchView.setQuery(mSearchString, true);
mSearchView.clearFocus();
最后3点不再出现。有一个搜索图标!很棒
我有类似的问题,并以此解决。
在onCreateOptionsMenu中:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu, menu);
MenuItem item = menu.findItem(R.id.search_option);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(searchQueryListener);
if(searchQuery!=null && !searchQuery.equals("")) {
searchView.setIconified(false);
searchView.setQuery(searchQuery,true);
searchView.clearFocus();
}
}
对于searchView菜单项:
<item
android:id="@+id/search_option"
android:title="@string/button_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always"/>
就我而言,我在搜索视图的右边还有一个带有图标的菜单项,这样,在旋转设备时它可以正常工作。