使用工具栏中的SearchView自动打开/关闭键盘

时间:2015-02-19 19:44:15

标签: android keyboard android-actionbar toolbar searchview

使用工具栏中的搜索视图作为操作栏,我在打开和关闭键盘方面遇到了大问题。当我点击搜索按钮时,它会作为动作消耗并显示编辑文本,但它没有焦点,键盘也没有打开。我必须手动点击edittext才能打开键盘。 关闭键盘也一样。当我按下关闭的搜索按钮时,键盘不会关闭。

我确信这在没有使用工具栏的情况下已经有效....但我无法用工具栏修复它。 有人有想法吗?

这是我的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.toolbar.MainActivity" >


<item
    android:id="@+id/action_search"
    android:icon="@drawable/ic_action_search"
    app:showAsAction="ifRoom|collapseActionView"


    app:actionViewClass="android.widget.SearchView"
    android:title="@string/action_search"/>

<item
    android:id="@+id/action_contact"
    android:icon="@drawable/ic_action_settings"
    app:showAsAction="ifRoom"

    android:title="@string/action_settings"/>

这是我的onCreateOptionsMenu

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   getMenuInflater().inflate(R.menu.main, menu);

    // Get the SearchView and set the searchable configuration
   SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
   searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

   searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

   // Do not iconify the widget;expand it by default
   searchView.setIconifiedByDefault(false);

   setSearchIcons();
   return super.onCreateOptionsMenu(menu);
}

感谢您的任何建议。 干杯!

EDIT1:

很明显,经过10个小时的奋斗,我问了这个问题,30分钟后我找到了解决方案。

这是app:showAsAction =“ifRoom | collapseActionView” collapseActionView。删除它就可以了。 但现在我有另一个问题。当搜索视图展开时,设置按钮看起来非常糟糕。设置按钮是半可见/半切出。

在API 21 Nexus 4 Android 5上,搜索视图会删除设置按钮。 在Android 4.4.2的THL 5000上,搜索视图似乎工作正常,但图标不像Nexus那样是白色而是灰色。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您的searchView并非始终处于展开状态,那么您可以尝试以下代码:

mSearchView.setIconifiedByDefault(true);
mMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
    @Override
    public boolean onMenuItemActionExpand(MenuItem item) {
        // Add code here
        return false;
    }

    @Override
    public boolean onMenuItemActionCollapse(MenuItem item) {
        // Add code here
        return false;
    }
});

在键盘上单击enter / done后隐藏键盘:

@Override public boolean onQueryTextSubmit(String query) {
    mSearchView.clearFocus();
    return true;
}