2013-06-20 46 views
9

フラグメント内にEditTextがあります。これは、それ自体がアクションバーのロック・タブ内にあります。 EditTextボックスの内部をタッチすると、拡大鏡(検索)アイコンを持つキーの1つが表示されたソフトキーボードが表示されます。テキストを入力して検索キーをクリックすると、onEditorActionで入力された文字列を処理できますが、ソフトキーボードは表示されたままです。私はそれをプログラムで閉じることができますか?フラグメント内のソフトキーボードを閉じる方法

ところで、EditTextの設定を検索時に自動的に閉じるように設定することができれば、自分自身も持っているので、ソフトキーボードをメソッド呼び出しで閉じることができますか?画面上の検索ボタン(ソフトキーボードとは関係ありません)を押したときにソフトキーボードを閉じるようにします。

注:誰かがこの質問を繰り返す前に、ソフトキーボードをいろいろなところで隠していることについてQ & Aの多くのQを見てきました。答えの多くはあまり複雑ではないように見えますが、ユーザーがEditTextフィールドを再びタップするまでキーボードを完全に隠すか、一時的に閉じてしまうかどうかは不明です。また、いくつかの回答では、フラグメントでは利用できないメソッドへの呼び出しが必要です。私はアクションバーのアイコンをクリックすると、それが働いているとき、それは多分、私が誤解して(あなたのケースでは動作しない理由、私は表示されません

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

+0

面白いのは、他の投稿を検索したときに、手動でAndroidキーボードを隠すことは、非常にWTF-why-my-device-not-applied問題であるということです。私は、意図しない状況が発生した場合に心を癒すことをお勧めします。または、あなたのアプリのUXを変更してください。 :( – Youngjae

答えて

37

public static void closeKeyboard(Context c, IBinder windowToken) { 
    InputMethodManager mgr = (InputMethodManager) c.getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.hideSoftInputFromWindow(windowToken, 0); 
} 

closeKeyboard(getActivity(), yourEditText.getWindowToken()); 
2

私は、フラグメントでこのコードを使用しています質問)。

7

これはアンドロイドのソフトキーボードを隠すための作業コードです。

私はこのように単純にキーボードを閉じて私の破片で
try { 
      InputMethodManager input = (InputMethodManager) activity 
        .getSystemService(Activity.INPUT_METHOD_SERVICE); 
      input.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
     }catch(Exception e) { 
      e.printStackTrace(); 
     } 
0

あなたは私の答えhereを確認することができます。それは断片の中で私のために働いた唯一の方法でした。

-1

フラグメントでの作業

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

フラグメント内のEditTextのキーボードとclearfocusを閉じるには明確な方法、あなたのEditText XMLを持っていることを確認することです。

android:id="@+id/myEditText"  
android:imeOptions="actionDone" 

次に設定しますあなたのEditText(Kotlin、そしてフラグメントから)へのリスナー:

myEditText.setOnEditorActionListener({ v, actionId, event -> 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       myEditText.clearFocus() 
       val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
       imm.hideSoftInputFromWindow(view!!.windowToken, 0)  
      } 
      false 
     }) 
関連する問題