android 快速关闭键盘的方法,如何在Android SearchView中关闭键盘?

如何在Android SearchView中关闭键盘?

我在ActionBar中有一个searchView。 当用户完成输入后,我想关闭键盘。 我在searchView上有以下queryTextListener

final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {

@Override

public boolean onQueryTextChange(String newText) {

// Do something

return true;

}

@Override

public boolean onQueryTextSubmit(String query) {

showProgress();

// Do stuff, make async call

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

return true;

}

};

基于类似的问题,以下代码应关闭键盘,但在这种情况下不起作用:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

我也尝试过:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);

两者均无效。 我不确定这是否是Honeycomb特有的问题,还是与ActionBar中的searchView有关,还是两者都没有。 有没有人使这种方法起作用或知道为什么它不起作用?

13个解决方案

65 votes

我正在尝试做类似的事情。 我需要从另一个Activity启动SearchActivity,并在加载时将搜索词显示在打开的搜索字段中。 我尝试了上述所有方法,但最终(类似于上述Ridcully的回答),我在onCreateOptionsMenu()中将变量设置为SearchView,然后在onQueryTextSubmit()中将其设置为clearFocus()在clearFocus()上,当用户提交新搜索时:

private SearchView searchView;

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.search_menu, menu);

searchView = (SearchView) menu.findItem(R.id.menu_search)

.getActionView(); // set the reference to the searchView

searchView.setOnQueryTextListener(this);

searchMenuItem = (MenuItem) menu.findItem(R.id.menu_search);

searchMenuItem.expandActionView(); // expand the search action item automatically

searchView.setQuery("", false); // fill in the search term by default

searchView.clearFocus(); // close the keyboard on load

return true;

}

@Override

public boolean onQueryTextSubmit(String query) {

performNewSearch(query);

searchView.clearFocus();

return true;

}

bkurzius answered 2019-11-16T08:41:45Z

32 votes

简单,直接,干净:

@Override

public boolean onQueryTextSubmit(String query) {

// your search methods

searchView.clearFocus();

return true;

}

dazito answered 2019-11-16T08:42:11Z

22 votes

只需在onQueryTextSubmit上返回false,如下所示

@Override

public boolean onQueryTextSubmit(String s) {

return false;

}

Plugie answered 2019-11-16T08:42:39Z

11 votes

如果您拨打电话,它会以某种方式起作用

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);

然后

otherWidget.requestFocus();

Randy Sugianto 'Yuku' answered 2019-11-16T08:43:07Z

7 votes

对我来说,以下作品:

在我的活动中,我有一个成员变量

private SearchView mSearchView;

在onCreateOptionsMenu()中,我将变量设置如下:

public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();

inflater.inflate(R.menu.library, menu);

mSearchView = (SearchView)menu.findItem(R.id.miSearch).getActionView();

mSearchView.setOnQueryTextListener(this);

return true;

}

最后在QueryTextListener中,我这样做:

mSearchView.setQuery("", false);

mSearchView.setIconified(true);

我看了SearchView的源代码,如果您不将查询文本重置为空字符串,则SearchView会这样做,并且也不会删除键盘。 yuku建议,实际上,对源代码进行了足够深入的研究,但还是一样,但是我仍然更喜欢我的解决方案,因为我不必弄那些低级的东西。

Ridcully answered 2019-11-16T08:44:01Z

7 votes

对我来说,以上所有内容均未在第一次提交时进行。 它隐藏了,然后立即重新显示键盘。 我必须将clearFocus()发布到视图的处理程序上,以使其在完成所有其他操作之后发生。

mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

@Override

public boolean onQueryTextSubmit(String query) {

if (!"".equals(query)) {

mSearchView.post(new Runnable() {

@Override

public void run() {

mSearchView.clearFocus();

}

});

}

return true;

}

@Override

public boolean onQueryTextChange(String newText) {

return false;

}

});

Till answered 2019-11-16T08:44:28Z

3 votes

编辑:我在上面添加了更好的解决方案,但也保留了旧答案作为参考。

@Override

public boolean onQueryTextSubmit(String query) {

searchView.clearFocus();

return false;

}

原始答案:我使用setOnQueryTextListener进行编程。 隐藏搜索视图时,键盘会消失,然后再次显示时,键盘不会弹出。

//set query change listener

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){

@Override

public boolean onQueryTextChange(String newText) {

// TODO Auto-generated method stub

return false;

}

@Override

public boolean onQueryTextSubmit(String query) {

/**

* hides and then unhides search tab to make sure keyboard disappears when query is submitted

*/

searchView.setVisibility(View.INVISIBLE);

searchView.setVisibility(View.VISIBLE);

return false;

}

});

Parnit answered 2019-11-16T08:45:02Z

1 votes

在我正在处理双窗格活动的平板电脑应用中,我只写了

f.getView().requestFocus(); // f is the target fragment for the search

这就足以在搜索后关闭软键盘。 无需使用InputMethodManager

Jose_GD answered 2019-11-16T08:45:44Z

1 votes

我使用了ActionBarSherlock 4.3,并且有一个ProgressDialog。 当我在postExecute方法中关闭它时,Searchview获得焦点。 要解决此问题:

//Handle intent and hide soft keyboard

@Override

protected void onNewIntent(Intent intent) {

setIntent(intent);

handleIntent(intent);

searchView.setQuery("", false);

searchView.setIconified(true);

searchView.clearFocus();

}

/*When dismiss ProgressDialog, searchview gain focus again and shows the keyboard. I call clearFocus() to avoid it.*/

AsyncTask.onPostExecute(){

if(pd!=null)

pd.dismiss();

if(searchView!=null)

searchView.clearFocus();

}

希望能帮助到你。

Roger Garzon Nieto answered 2019-11-16T08:46:14Z

1 votes

您可以使用它。

if (isKeybordShowing(MainActivity.this, MainActivity.this.getCurrentFocus())) {

onBackPressed();

}

public boolean isKeybordShowing(Context context, View view) {

try {

InputMethodManager keyboard = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

keyboard.hideSoftInputFromWindow(view.getWindowToken(), 0);

return keyboard.isActive();

} catch (Exception ex) {

Log.e("keyboardHide", "cannot hide keyboard", ex);

return false;

}

}

Mert TUTSAK answered 2019-11-16T08:46:36Z

0 votes

有两种解决方案对我有用,第一种使用SearchView实例:

private void hideKeyboard(){

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);

}

第二种解决方案:

private void hideKeyboard(){

InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

}

Jorgesys answered 2019-11-16T08:47:10Z

0 votes

下面的代码对我来说可以在Searchview中隐藏键盘

MenuItem searchItem = baseMenu.findItem(R.id.menuSearch);

edtSearch= (EditText) searchItem.getActionView().findViewById(R.id.search_src_text);

MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {

@Override

public boolean onMenuItemActionExpand(MenuItem item) {

edtSearch.post(new Runnable() {

@Override

public void run() {

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);

}

});

return true;

}

@Override

public boolean onMenuItemActionCollapse(MenuItem item) {

return true;

}

});

Ankita Shah answered 2019-11-16T08:47:37Z

0 votes

你为什么不试试这个? 触摸X按钮时,无论如何都会触发对搜索视图的关注。

ImageView closeButton = (ImageView)searchView.findViewById(R.id.search_close_btn);

closeButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

EditText et = (EditText) findViewById(R.id.search_src_text);

et.setText("");`enter code here`

searchView.setQuery("", false);

searchView.onActionViewCollapsed();

menuSearch.collapseActionView();

}

});

Giancarlo Calderón Pereda answered 2019-11-16T08:48:04Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值