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

标签 android keyboard android-actionbar toolbar searchview

我在使用工具栏中的搜索 View 作为操作栏打开和关闭键盘时遇到了很大的问题。当我点击搜索按钮时,它会作为一个操作展开,并且会出现编辑文本,但它没有焦点,并且键盘不会打开。我必须手动单击编辑文本才能打开键盘。 关闭键盘也是如此。当我点击关闭搜索操作按钮时,它们的键盘不会关闭。

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

这是我的菜单:

<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);
}

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

编辑1:

显然,经过 10 个小时的挣扎,我提出了这个问题,30 分钟后我找到了解决方案。

这是应用程序:showAsAction="ifRoom|collapseActionView" 折叠ActionView。删除它就成功了。 但现在我有另一个问题。当搜索 View 展开时,设置按钮看起来很糟糕。设置按钮一半可见/一半被切掉。

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

最佳答案

如果您的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;
}

关于android - 使用工具栏中的 SearchView 自动打开/关闭键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28615503/

相关文章:

android - 在 ActionBar.Tab 中更改选项卡宽度

android - 如何在Java(Android Studio)中的类之间传递变量值?

android - 由于在我的 ListView 中添加联系人图像导致 android ListView 性能下降

flash - 如何从 Adob​​e Flash 中的 AS3 类访问舞台

android - 操作栏选项卡选择分隔线颜色

android - 使用 AppCompat 的 ActionBar 下方的不确定水平 ProgressBar?

java - 运行 "Android update project --path ."返回无效的参数数量

php - 适用于 Android 的 IDE?

linux - 绑定(bind)具有相同 key 代码的 key ,不会丢失第二个 key

windows - 在 WM_KEYDOWN 中获取 Unicode 字符