Android軟鍵盤模式

HFW發表於2019-05-09

軟鍵盤模式(WindowManager.LayoutParams)

  • 首先要分清是前進還是後退 假設有A、B、C三個頁面,A啟動B,表示前進,C返回B表示後退,並且下面的軟鍵盤顯示與否與當前頁面中是否有輸入框無關,比如設定了SOFT_INPUT_STATE_VISIBLE則進入該Activity就會彈出軟鍵盤無論該頁面中是否有輸入框
  • 下面是幾種頁面切換時軟鍵盤顯示與否的模式,如果輸入框本身就顯示在軟鍵盤上面,那麼幾種模式都一樣,軟鍵盤顯示不會改變Activity的任何檢視,下面講述的是當軟鍵盤彈起會遮擋輸入框的情形
  1. SOFT_INPUT_STATE_UNSPECIFIED 預設模式,系統會根據介面採取相應的軟鍵盤的顯示模式
  2. SOFT_INPUT_STATE_UNCHANGED 當這個Activity出現時,軟鍵盤將一直保持在上一個Activity裡的狀態,無論是後退還是前進
  3. SOFT_INPUT_STATE_HIDDEN 前進到設定該模式的Activity時如果鍵盤已經顯示會隱藏鍵盤,回退到該Activity則軟鍵盤是否顯示保持不變
  4. SOFT_INPUT_STATE_ALWAYS_HIDDEN 前進或後退到該Activity如果軟鍵盤已經顯示都會關閉
  5. SOFT_INPUT_STATE_VISIBLE 當前進到設定該模式的Activity時會顯示軟鍵盤,回退到該Activity則軟鍵盤是否顯示保持不變
  6. SOFT_INPUT_STATE_ALWAYS_VISIBLE 當前進或後退到該Activity如果軟鍵盤已經消失會顯示
  • 下面是幾種當軟鍵盤彈出時是否需要調整Activity的檢視
  1. SOFT_INPUT_ADJUST_UNSPECIFIED 未指定模式系統將根據情況使用下面的幾種模式
  2. SOFT_INPUT_ADJUST_RESIZE 如果當前Activity有focus的輸入框那麼進入時就會彈出軟鍵盤,並且當軟鍵盤顯示時會縮小ContentView(id 為 android.R.id.content)的高度,用以顯示軟鍵盤,注意該屬性不能與SOFT_INPUT_ADJUST_PAN一起使用
  3. SOFT_INPUT_ADJUST_PAN 如果當前Activity有focus的輸入框進入時不會彈出軟鍵盤,並且當軟鍵盤顯示時會把整個ContentView向上移動一段距離直到輸入框能夠顯示出來(可能會出現短暫的底部黑屏),注意該屬性不能與SOFT_INPUT_ADJUST_PAN一起使用
  4. 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

  1. 想要彈出PopupWindow的時候隱藏軟鍵盤可以設定以下程式碼
    window.setFocusable(true);
    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    複製程式碼
  2. 彈出的PopupWindow直接覆蓋在軟鍵盤上面
    window.setFocusable(true);
    window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
    複製程式碼

相關文章