旋转后的Searchview - 按钮进入" 3点"

时间:2017-05-12 11:56:58

标签: android xml rotation searchview

我在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会变成那些没有任何动作的3个小点。要恢复以前的行为,我必须再次旋转设备。

我几乎可以肯定问题出在我的XML上:

<item
android:id="@+id/botao_buscar"
android:title="@string/menu_buscar"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"/>

更改&#34; showAsAction&#34;属于&#34;总是&#34;像魅力一样工作。

对此有何想法?

3 个答案:

答案 0 :(得分:1)

为了克服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()做到这一点。

答案 1 :(得分:0)

我有类似的问题并且像这样解决了。

在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"/>

在我的情况下,我在搜索视图的右侧有另一个带有图标的菜单项,这样在旋转设备时它可以正常工作。

答案 2 :(得分:0)

最后,我在以下站点找到了一个解决方案: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点不再出现。有一个搜索图标!很棒