1. 程式人生 > >關於項目中很多鍵盤無故彈出或無隱藏的總結

關於項目中很多鍵盤無故彈出或無隱藏的總結

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; }
});

關於項目中很多鍵盤無故彈出或無隱藏的總結