24

edittext を含むフラグメントがあります。edittext をクリックすると、キーボードが表示されます。問題は、引き出しを開いたときに、引き出しがキーボードを隠していないことです。別のフラグメントに切り替えても、キーボードはまだ表示されています。引き出しを開いたときにキーボードを非表示にするにはどうすればよいですか。

私は入れようとします

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

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

どちらもキーボードを隠しません。

4

7 に答える 7

32

スライド ドロワーを開閉する前に、次のコード行を使用します。

InputMethodManager inputMethodManager = (InputMethodManager)  this.getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);
于 2014-01-14T11:37:13.457 に答える
28

これを試して...

@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 :

 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);
        }
    };
于 2015-08-19T06:51:28.300 に答える
9

セットドロワー リスナーは既に非推奨です。mDrawerLayout.addDrawerListener()を使用してナビゲーション ドロワーの状態の変化を検出し、キーボードを閉じます onDrawerStateChange

mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {

    @Override
    public void onDrawerSlide(View drawerView, float slideOffset) {
        //Called when a drawer's position changes.

    }

    @Override
    public void onDrawerOpened(View drawerView) {
        //Called when a drawer has settled in a completely open state.
        //The drawer is interactive at this point.
        // If you have 2 drawers (left and right) you can distinguish 
        // them by using id of the drawerView. int id = drawerView.getId(); 
        // id will be your layout's id: for example R.id.left_drawer            
    }

    @Override
    public void onDrawerClosed(View drawerView) {
        // Called when a drawer has settled in a completely closed state.
    }

    @Override
    public void onDrawerStateChanged(int newState) {
        // Called when the drawer motion state changes. The new state will be one of STATE_IDLE, STATE_DRAGGING or STATE_SETTLING.
        InputMethodManager inputMethodManager = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

    }
});  
于 2018-04-05T11:07:01.057 に答える
1

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

たとえばEditText mEditText、現在フォーカスされているオブジェクトがキーボードのキーストロークを受け取っているとします。したがって、コードは次のようになります。

 InputMethodManager imm = 
                    (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
于 2013-07-07T21:17:34.680 に答える