由於有的時候去設置AndroidManifest.xml去設置android
android:windowSoftInputMode="stateVisible|adjustResize|stateAlwaysHidden"
不必定可以達到想要的效果,好比輸入框在界面的最下面好比微信和QQ聊天界面,聊天框在界面下面,在設置adjustResize的時候是能夠移動界面留出鍵盤位置,可是若是在聊天界面裏面在加上一個背景圖片或者是視頻,這個時候adjustResize就明顯不夠用了。就須要咱們去判斷鍵盤彈起和收回狀態去動態計算界面高度,已達到咱們想要的效果。 其實若是Android可以提供這樣的api的話就很好解決,現在他並沒提供此方法,那也就咱們本身解決。 解決辦法就是一樣須要在AndroidManifest設置adjustResize的屬性,須要這個去改變界面佈局大小方便計算佈局的改變,這裏rootView必定是根目錄佈局文件。api
rootView.getViewTreeObserver().addOnGlobalLayoutListener(globalLayoutListener); int mVisibleHeight; //鍵盤狀態監聽 private ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { final Rect rect = new Rect(); rootView.getWindowVisibleDisplayFrame(rect); int screenHeight = rootView.getRootView().getHeight(); keyHeight = screenHeight / 3; int visibleHeight = rect.height(); //閥值設置爲屏幕高度的1/3 int heightDifference = screenHeight - (rect.bottom - rect.top); if (mVisibleHeight == 0) { mVisibleHeight = visibleHeight; return; } if (mVisibleHeight == visibleHeight) { return; } mVisibleHeight = visibleHeight; boolean visible = heightDifference > screenHeight / 3; if (visible) { //鍵盤彈出 }else{ //鍵盤收起 } } };