關於項目中很多鍵盤無故彈出或無隱藏的總結
阿新 • • 發佈:2017-09-13
event alt 有時 chang 總結 android 屏幕 always 文件
1.activity的鍵盤問題
當布局中有EditText時,鍵盤有時會主動彈出影響界面效果,解決方式如下:
在清單文件-Manifest.xml中設定activity的屬性
1.鍵盤的隱藏
android:windowSoftInputMode="stateHidden|stateUnchanged"
"stateUnspecified"是指軟鍵盤的狀態(是否它是隱藏或可見)沒有被指定。
"stateHidden" 當用戶選擇該Activity時,軟鍵盤被隱藏——也就是,當用戶確定導航到該Activity時,而不是返回到它由於離開另一個Activity。
註:
在實際中中遇到一個問題:
在兩個頁面都有EditText作為搜索框時,進入第二個頁面後,鍵盤始終無法彈出。
給EditText設置屬性:
android:focusableInTouchMode="true"
另一種在activity設置:
調用隱藏系統默認的輸入法
1.
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(Activity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
PS:(Activity是當前的Activity)
2.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
2.鍵盤的彈出
根據項目需要若設置鍵盤彈出如下:
android:windowSoftInputMode="stateVisible|adjustResize"
"adjustResize" 該Activity主窗口總是被調整屏幕的大小以便留出軟鍵盤的空間(簡而言之就是啟動該activity時鍵盤默認彈出)。
2.fragment的鍵盤問題
隱藏軟鍵盤:
方法1:
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
方法2:
View v = getActivity().getWindow().peekDecorView();if (v != null){ InputMethodManager inputmanger = (InputMethodManager)getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE); inputmanger.hideSoftInputFromWindow(mv.getWindowToken(), 0); }
彈出軟鍵盤:
editText.requestFocus(); InputMethodManager imm =(InputMethodManager)editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
PS:editText.requestFocus()是把焦點放在editText這個控件上。
拓展:
點擊其他部位隱藏軟鍵盤
這個時候我們可以通過 onCreateView 返回的view設置它的setOnTouchListener方法具體代碼如下:
view.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) {
View v = getActivity().getWindow().peekDecorView();
if (v != null){
InputMethodManager inputmanger = (InputMethodManager)getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputmanger.hideSoftInputFromWindow(mv.getWindowToken(), 0);
}
return false; }
});
關於項目中很多鍵盤無故彈出或無隱藏的總結