軟鍵盤模式(WindowManager.LayoutParams)
- 首先要分清是前進還是後退 假設有A、B、C三個頁面,A啟動B,表示前進,C返回B表示後退,並且下面的軟鍵盤顯示與否與當前頁面中是否有輸入框無關,比如設定了SOFT_INPUT_STATE_VISIBLE則進入該Activity就會彈出軟鍵盤無論該頁面中是否有輸入框
- 下面是幾種頁面切換時軟鍵盤顯示與否的模式,如果輸入框本身就顯示在軟鍵盤上面,那麼幾種模式都一樣,軟鍵盤顯示不會改變Activity的任何檢視,下面講述的是當軟鍵盤彈起會遮擋輸入框的情形
- SOFT_INPUT_STATE_UNSPECIFIED 預設模式,系統會根據介面採取相應的軟鍵盤的顯示模式
- SOFT_INPUT_STATE_UNCHANGED 當這個Activity出現時,軟鍵盤將一直保持在上一個Activity裡的狀態,無論是後退還是前進
- SOFT_INPUT_STATE_HIDDEN 前進到設定該模式的Activity時如果鍵盤已經顯示會隱藏鍵盤,回退到該Activity則軟鍵盤是否顯示保持不變
- SOFT_INPUT_STATE_ALWAYS_HIDDEN 前進或後退到該Activity如果軟鍵盤已經顯示都會關閉
- SOFT_INPUT_STATE_VISIBLE 當前進到設定該模式的Activity時會顯示軟鍵盤,回退到該Activity則軟鍵盤是否顯示保持不變
- SOFT_INPUT_STATE_ALWAYS_VISIBLE 當前進或後退到該Activity如果軟鍵盤已經消失會顯示
- 下面是幾種當軟鍵盤彈出時是否需要調整Activity的檢視
- SOFT_INPUT_ADJUST_UNSPECIFIED 未指定模式系統將根據情況使用下面的幾種模式
- SOFT_INPUT_ADJUST_RESIZE 如果當前Activity有focus的輸入框那麼進入時就會彈出軟鍵盤,並且當軟鍵盤顯示時會縮小ContentView(id 為 android.R.id.content)的高度,用以顯示軟鍵盤,注意該屬性不能與SOFT_INPUT_ADJUST_PAN一起使用
- SOFT_INPUT_ADJUST_PAN 如果當前Activity有focus的輸入框進入時不會彈出軟鍵盤,並且當軟鍵盤顯示時會把整個ContentView向上移動一段距離直到輸入框能夠顯示出來(可能會出現短暫的底部黑屏),注意該屬性不能與SOFT_INPUT_ADJUST_PAN一起使用
- SOFT_INPUT_ADJUST_NOTHING 當軟鍵盤顯示時不縮小ContentView的高度,也不移動ContentView,可能會導致輸入框不可見
- 上述幾個Mode作用於滾動檢視也是如此,設定成SOFT_INPUT_ADJUST_NOTHING,還是不改變Activity的檢視只是彈出一個輸入框。設定成SOFT_INPUT_ADJUST_RESIZE,則會減少ContentView的高度,滾動檢視會向上滾動,直到Focus的輸入框顯示在輸入框上面,進入Activity時如果有輸入框Focus也會自動彈出軟鍵盤。設定成SOFT_INPUT_ADJUST_PAN,可能會導致滾動檢視的上邊的Item不可見因為滾動檢視向上移動出了螢幕。
Tip
- 想要彈出PopupWindow的時候隱藏軟鍵盤可以設定以下程式碼
window.setFocusable(true); window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 複製程式碼
- 彈出的PopupWindow直接覆蓋在軟鍵盤上面
window.setFocusable(true); window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); 複製程式碼