android开发分享如何在Android SearchView中closures键盘?

我在ActionBar中有一个searchView。 我想在用户完成input时closures键盘。 我在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; } }; 

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

 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相关。 有没有人得到这个工作,或知道为什么它不工作?

    我正在尝试做类似的事情。 我需要从另一个Activity启动SearchActivity ,并在加载时在已打开的search字段中显示search词。 我尝试了上述所有方法,但最后(类似于Ridcully上面的回答 )我在onCreateOptionsMenu()设置一个variables给SearchView ,然后在用户提交一个新的search时,在SearchView上调用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("<put your search term here>", 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; } 

    简单,直接点和干净:

      @Override public boolean onQueryTextSubmit(String query) { // your search methods searchView.clearFocus(); return true; } 

    不知何故,如果你打电话它的作品

     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0); 

    接着

     otherWidget.requestFocus(); 

    就像下面的onQueryTextSubmit返回false

     @Override public boolean onQueryTextSubmit(String s) { return false; } 

    对我来说,以下作品:

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

     private SearchView mSearchView; 

    onCreateOptionsMenu()我设置variables像这样:

     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的源代码,如果你没有将查询文本重置为空string,SearchView只是这样做,并不会删除键盘。 实际上,深入研究源代码,yuku提出了相同的build议,但是我仍然喜欢我的解决scheme,因为我不必陷入这些低级别的东西。

    对我而言,以上都没有在第一次提交工作。 这是隐藏,然后立即重新显示键盘。 我必须在视图的处理程序上发布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; } }); 

    在我正在使用双窗格活动的平板电脑应用程序中,我只写了一个

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

    而且这足以在search后解开软键盘。 不需要使用InputMethodManager

    我用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(); } 

    希望能帮助到你。

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

      @Override public boolean onQueryTextSubmit(String query) { searchView.clearFocus(); return false; } 

    原来的答案:我编程使用setOnQueryTextListener。 当searchview被隐藏时,键盘消失,然后当它再次可见时,键盘不会popup。

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

    两种解决scheme适用于我,第一种使用SearchView实例:

     private void hideKeyboard(){ InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0); } 

    解决scheme二

     private void hideKeyboard(){ InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } 

    下面的代码正在为我隐藏键盘在search视图

    以上就是android开发分享如何在Android SearchView中closures键盘?相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/514043.html

      (0)
      上一篇 2020年11月29日
      下一篇 2020年11月29日

      精彩推荐