Android, 获取虚拟键盘的高度

原文:http://solo.farbox.com/blog/get-softkeyboard-height

在很多时候,很多需求下,我们都需要得知键盘的高度啊!实在不能理解为什么安卓不提供这样方便的API。虽然没有很好的监听事件,但是我们还是可以制造一个的。想想虚拟键盘弹起来之后界面发生了什么变化?对的,有一半的界面被遮挡了,那么我们就可以针对这个不同点制造一个事件监听了。

View mYourView;
int mVisibleHeight;
boolean mIsKeyboardShow;
protected void onCreate(Bundle savedInstanceState) {
  ...
  mYourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
      getKeyboardHeight();
    }
  });
  ...
}
private void getKeyboardHeight() {
  Rect r = new Rect();
  mYourView.getWindowVisibleDisplayFrame(r);
  int visibleHeight = r.height();
  if (mVisibleHeight == 0) {
    mVisibleHeight = visibleHeight;
    return;
  }
  if (mVisibleHeight == visibleHeight) {
    return;
  }
  mVisibleHeight = visibleHeight;
  // Magic is here
  if (/* compare the visiable height to others */) {
    mIsKeyboardShow = true;
  } else {
    mIsKeyboardShow = false;
  }
}

你可能感兴趣的:(Android, 获取虚拟键盘的高度)