getWindowVisibleDisplayFrame() gives different values in Android 2.2, 2.3 (but not 2.3.3)

前端 未结 4 1244
执笔经年
执笔经年 2021-01-06 03:11

I\'ve got an Activity which uses

getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle);

to determine the useable

4条回答
  •  太阳男子
    2021-01-06 03:23

    Welp, if you read the comments in the source, it admits that this method is kind of broken

        public void getWindowVisibleDisplayFrame(Rect outRect) {
        if (mAttachInfo != null) {
            try {
                mAttachInfo.mSession.getDisplayFrame(mAttachInfo.mWindow, outRect);
            } catch (RemoteException e) {
                return;
            }
            // XXX This is really broken, and probably all needs to be done
            // in the window manager, and we need to know more about whether
            // we want the area behind or in front of the IME.
            final Rect insets = mAttachInfo.mVisibleInsets;
            outRect.left += insets.left;
            outRect.top += insets.top;
            outRect.right -= insets.right;
            outRect.bottom -= insets.bottom;
            return;
        }
    

    You will have to ignore the outRect.top value for versions < 2.3.3

提交回复
热议问题