2013-03-05 9 views
11

ActionBar上にSearchViewがあり、アイコン化されていないことが設定されています。ユーザが検索するものを入力するまでは、ビューにコンテンツがないので、SearchViewの初期フォーカスを与え、ソフトキーボードがユーザがテキストを入力できる状態になっていることを確認することが理にかなっています。最初にSearchViewをタップする必要があります。ActionBarでSearchViewのソフトキーボードを表示

私はちょうど

searchView.requestFocus(); 

を呼び出すことにより、SearchViewフォーカスを与えることができますが、私は表示されるソフトキーボードを取得することはできません。私たちのフラグメントの別の1で、私たちは

InputMethodManager mgr = (InputMethodManager)getActivity().getSystemService(
      Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

を呼び出すことによって、私はソフトキーボードが表示されるように得ることができます集中することにしたいのEditTextを持っているが、これは単にSearchView上では動作しません。これを確実に機能させるには、必ず可能でなければなりません。

+0

はそれを試してみてください。http://stackoverflow.com/a/39635722/2535875 –

答えて

22

がさらにStackOverflowの周り臨検し、私はこの質問が見つかりました:

Forcing the Soft Keyboard open

が働いたソリューションが含まれています私:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)). 
    toggleSoftInput(InputMethodManager.SHOW_FORCED, 
        InputMethodManager.HIDE_IMPLICIT_ONLY); 
+0

これは私のためにキーボードを取得しますが、onCreateOptionsMenu()の内部でそれを行う場合は、このコードを一度だけ実行したことを確認するフラグを保持する必要がありました。それ以外の場合は、検索を提出した後にキーボードが再びポップアップし続けます。 – user291701

+1

私は同じ問題を抱えており、ここでSearchViewソリューションが役立つことが判明しました:http://stackoverflow.com/questions/12022715/unable-to-show-keyboard-automatically-in-the-searchview –

+1

これは役に立ちません。キーボード入力が可能な2つのビューがありますか?テキストを正しいビューに送るために、キーボードが必要になります。 – mskw

1

は、あなたのSearchViewonFocusChangeListenerを添付しよう - それはEditTextで私のために働い:

searchView.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
       activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
      } 
     } 
    }); 

はまた、そうでない場合は、あなたのリスナーはないでしょう、XMLでSearchViewには、リクエストフォーカスタグがないことを確認してください呼び出される。

+0

これはどちらか動作しません。私が質問したところでは、ソフトキーボードにEditTextがある別のフラグメントを表示することができます。これは、SearchViewであることに関する「特別な」、またはActionBarにあることに関する「特別な」ことを示唆しています。 –

-1

使用をExpandView方法: あなたonCreateOptionsMenuは次のようなものが考えられます。

  @Override                          
     public boolean onCreateOptionsMenu(Menu menu) {               
//Used to put dark icons on light action bar                

    final SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());     


     MenuItem mitem = menu.add("Search");                 

     mitem.setIcon(ic_search_inverse)                  
      .setActionView(searchView)                  
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 

     mitem.expandActionView();              

     listsearch.setOnItemClickListener(this);                

return  true;                        
     } 
-2

あなたは私がやったことを試すことができます。これは私のためにうまくいった。

//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 
      * 4 = INVISIBLE 
      * 0 = VISIBLE 
      */ 
        searchView.setVisibility(4); 
        searchView.setVisibility(0); 
      return false; 
     } 

    }); 
6

私はsetIconifiedByDefault(偽)とSearchViewを使用しています。 Android 4.4.2でのテストでは、キーボードを実際に表示させる唯一の方法は、SearchViewのソースコードを見て、キーボードの表示方法を模倣することでした。文字通り、私が見つけられる/思うことができる他の方法を試してきました。これがキーボードを確実に表示できる唯一の方法です。残念なことに、私の方法は、いくつかの反映を必要とします。

onCreateOptionsMenu(メニュー)では

searchView.requestFocus(); 
searchView.post(new Runnable() { 
    @Override 
    public void run() { 
     showSoftInputUnchecked(); 
    } 
}); 

そしてInputMethodManagerに "showSoftInputUnchecked" 隠されたメソッドを呼び出すメソッドを作成:のメソッドをいないアクセスするすべてのソリューションと同様に

private void showSoftInputUnchecked() { 
    InputMethodManager imm = (InputMethodManager) 
      getSystemService(Context.INPUT_METHOD_SERVICE); 

    if (imm != null) { 
     Method showSoftInputUnchecked = null; 
     try { 
      showSoftInputUnchecked = imm.getClass() 
        .getMethod("showSoftInputUnchecked", int.class, ResultReceiver.class); 
     } catch (NoSuchMethodException e) { 
      // Log something 
     } 

     if (showSoftInputUnchecked != null) { 
      try { 
       showSoftInputUnchecked.invoke(imm, 0, null); 
      } catch (IllegalAccessException e) { 
       // Log something 
      } catch (InvocationTargetException e) { 
       // Log something 
      } 
     } 
    } 
} 

を公開APIを使用していますが、これはAndroidの新しいバージョンでは壊れないと約束できません。

+0

ありがとうございます!できます! –

+0

唯一の答えです。 Androidのソフトキーボードの状況はどれぐらい悲しいですか?その哀れな。 –

0

私のために働いた。

1

私は、ここで提案されている解決策のどれもうまくいきません。一部の人はキーボードをまったく表示しないものもあれば、キーボードを表示するものもありますが、キープレスは機能しません。

だった働いただけの事:

    // hack for making the keyboard appear 
        searchView.setIconified(true); 
        searchView.setIconified(false); 
関連する問題