在部分安卓機型遇到 SoftInputMode 設置 adjustPan / adjustResize 無效的情況。於是對鍵盤做了單獨的監聽,方便統一處理
private int oldDiff = 0; @Override protected void onCreate(...) { listenKeyboardVisible(); } private void listenKeyboardVisible() { final View activityRoot = getWindow().getDecorView(); if (activityRoot ==null) { return; } mainContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { private final Rect r =new Rect(); @Override public void onGlobalLayout() { activityRoot.getWindowVisibleDisplayFrame(r); int diff = activityRoot.getRootView().getHeight() -r.height(); //鍵盤是否彈出 boolean isOpen = (diff > 200); if(diff!=oldDiff){ Log.d("keyboard", "keyboard open: "+isOpen); oldDiff = diff; // do someting... } } }); }