軟鍵盤手動控制彈出與關閉

最近一直在做搜索頁面,爲了提高用戶的體驗,需要自動彈出和關閉軟鍵盤。本以爲是件簡單的事,結果網上的東西盡是些有問題的,要麼就是彈不出,要麼就是第一次可以彈出,但第二次就彈不出了。經過本人的多次實驗,終於整理出了彈出和關閉軟鍵盤的較好的方法。

1.彈出軟鍵盤

//獲取焦點,只有這樣纔有效
mViewDataBinding.editSearchContent.requestFocus();
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);           

這兩句代碼可以直接彈出軟鍵盤,但是第二次調用時就沒有作用了。如果使用網上說的showSoftInput方法的話,是需要在View完成了繪製後纔會有效。

//這裏需要延遲請求,但是不知道爲什麼,即使我延遲請求了也沒用,鬱悶。
InputMethodManager inputManager =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(mViewDataBinding.editSearchContent, 0);

所以結合兩種方法的特點,如果我們需要在Activity開始時就顯示軟鍵盤,則可以第一次時使用第一種方法,以後需要顯示的化就使用第二次的方法,即:

//判斷是否是第一次請求
if (isFirst) {
			//獲取焦點,否則請求無效
            mViewDataBinding.editSearchContent.requestFocus();
            //設置當獲得焦點時彈出軟鍵盤
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            isFirst = false;
        } else {
        	mViewDataBinding.editSearchContent.requestFocus();
        	//以後的請求直接調用showSoftInput方法就行了
            InputMethodManager inputManager =
                    (InputMethodManager) getSystemService(
                            Context.INPUT_METHOD_SERVICE);
            inputManager.showSoftInput(mViewDataBinding.editSearchContent, 0);
          	//移動光標到EditText的最後
            mViewDataBinding.editSearchContent.setSelection(mViewDataBinding.editSearchContent.getText().length());
        }
}

這樣的就能完美的控制軟鍵盤的顯示了。

2.關閉軟鍵盤

關閉軟鍵盤就沒有那麼多坑了直接用網上比較常用的就行了。

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章