Android軟鍵盤模式

軟鍵盤模式(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);
    複製代碼
相關文章
相關標籤/搜索