2013-07-07 10 views
17

私はその中にedittextを持つ断片を持っています。 edittextをクリックすると、キーボードが表示されます。 問題は、私が引き出しを開くとき、引き出しはキーボードを隠さないことです。 キーボードがまだ別のフラグメントに切り替わっても表示されています。 引き出しを開いたときにキーボードを隠すにはどうすればいいですか?ナビゲーションドロワーonDrawerOpened時にキーボードを隠す

私はそれの両方のキーボードを隠していない

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

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

を入れてみてください。

答えて

25

スライド引き出し

InputMethodManager inputMethodManager = (InputMethodManager) this.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0); 
+0

私はいつも困っています。 'Fragments'(' NavigationDrawer'または 'ViewPager'にあります)を使って' EditText'から 'WindowToken'を呼び出します。 'Activity.getCurrentFocus()'は私が欠けていたものでした。どうもありがとう。 – shkschneider

1

問題は、キーボードを現在「保持」しているビューからgetWindowToken()を呼び出す必要があることです。それは非常に迷惑な、私はあなたに同意しますが、それはどのように動作します。

たとえば、キーボードのキーストロークを受信して​​いる現在フォーカスにあるオブジェクトがEditText mEditTextであるとします。だからあなたのコードは:

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

が役に立ちます。

23

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ...... 

    //Initialize 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

    //Setting the actionbarToggle to drawer layout 
    drawerLayout.setDrawerListener(actionBarDrawerToggle); 

    //calling sync state is necessay or else your hamburger icon wont show up 
    actionBarDrawerToggle.syncState(); 

} 

DrawerListerner ...これを試してみてください閉じる/ OPE前のコード行を使用してください:

ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.app_name, R.string.app_name) { 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank 
      super.onDrawerClosed(drawerView); 
      InputMethodManager inputMethodManager = (InputMethodManager) 
        getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank 
      super.onDrawerOpened(drawerView); 
      InputMethodManager inputMethodManager = (InputMethodManager) 
        getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
     } 
    }; 

コーディングハッピー...

+0

ありがとうございます。これは私の問題を解決しました:)) –

+0

こんにちは、私にnullポインタの例外を与えるif(drawer!= null){ drawer.setDrawerListener(toggle); hideKeyboard(this); } appcompatv7を使用してアンドロイドスタジオのActionBarDrawerToggleを変更することはできません。助けてください – Pihu

+0

あなたのActionBarDrawerToggleリスナオブジェクトをチェックしてください。正しく実装されていないと、nullポインタ例外が発生する可能性があります。 –

関連する問題