You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义Android搜索对话框默认行为?提交后关闭对话框与软键盘

解决SearchView提交搜索后不收起及软键盘未关闭问题

核心解决方案

要实现提交搜索后折叠搜索框并关闭软键盘,需完成两个关键操作:折叠SearchView对应的ActionView,以及调用系统服务隐藏软键盘。具体步骤如下:

  1. 保存搜索菜单项引用
    在Activity中添加成员变量,用于保存搜索对应的MenuItem实例,方便后续调用折叠方法:
private MenuItem searchMenuItem;
  1. 修改onCreateOptionsMenu获取并保存MenuItem
    更新菜单初始化代码,将搜索项的MenuItem实例保存下来:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.appbar_menu, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    // 保存搜索菜单项引用
    searchMenuItem = menu.findItem(R.id.search_box);
    SearchView searchView = (SearchView) searchMenuItem.getActionView();

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

    return super.onCreateOptionsMenu(menu);
}
  1. 在搜索处理完成后折叠搜索框并关闭软键盘
    在handleIntent方法的搜索逻辑执行完毕后,添加折叠和软键盘关闭代码:
public void handleIntent(Intent intent) {
    TextView tv = (TextView) popupView.findViewById(R.id.list_food_name);
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        String query = intent.getStringExtra(SearchManager.QUERY);
        Log.e("Message :","The search intent was received");
        Log.e("Message :","The search query was: " + query);

        // Bind the popup children
        Iterator iterator = DatabaseOpenHelper.foodList.iterator();
        while (iterator.hasNext()) {
            Food food = (Food) iterator.next();
            if (food.getFoodName().equals(query)) {
                Log.e("Message :", "Food name is :" + food.getFoodName());
                tv.setText(food.getFoodName());
                Log.e("Message :", "The listFoodName TextView text is :" + tv.getText());
            }
        }
        popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);

        // 折叠搜索框
        if (searchMenuItem != null && searchMenuItem.isActionViewExpanded()) {
            searchMenuItem.collapseActionView();
        }

        // 隐藏软键盘
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
    }
}

补充说明

  • collapseActionView()方法会将展开的SearchView折叠回应用栏的图标状态,同时自动清除搜索框焦点。
  • 使用InputMethodManager的hideSoftInputFromWindow方法,传入当前窗口DecorView的WindowToken,可确保软键盘被强制关闭,不受当前焦点View的影响。

内容的提问来源于stack exchange,提问作者azeemofwalsall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:50:17