getWindowVisibleDisplayFrame () дает разные значения в Android 2.2, 2.3 (но не 2.3.3) - PullRequest
5 голосов
/ 05 октября 2011

У меня есть Activity, который использует

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

, чтобы определить используемое пространство экрана и решить, где разместить изображения.

Возврат к действию после того, как я щелкну оборудованиеКнопка «назад», чтобы оставить Activity, значения прямоугольника

(0,0,800,480)

Однако, возвращаясь к Activity после того, как я нажимаю аппаратную кнопку «домой», чтобы оставить Activity, значения прямоугольника

(0,38,800,480)

, который сбрасывает отображение и размещение изображения.

Как я могу получить постоянные значения при вызове

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

независимо от того, как я ушелприложение?

ОБНОВЛЕНИЕ: Спасибо @Reno за помощь в тестировании;похоже, что он зависит от версии Android, а не от устройства.

Ответы [ 4 ]

4 голосов
/ 05 октября 2011

Welp, если вы читаете комментарии в источнике, он признает, что этот метод не работает

    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;
    }

Вам придется игнорировать значение outRect.top для версий <2.3.3 </p>

1 голос
/ 11 октября 2013

здесь - это ссылка для непосредственного получения строки состояния вместо ее расчета. Это позволит избежать любой проблемы getWindowVisibleDisplayFrame, которая действительно несовместима с платформами и устройствами.

0 голосов
/ 22 мая 2013

Бывают случаи, когда вам нужно знать точные размеры доступного пространства для макета в onCreate действия.После некоторого размышления я разработал такой способ: https://stackoverflow.com/a/16691531/2202013 Он не использует getWindowVisibleDisplayFrame и, надеюсь, будет в будущем.

0 голосов
/ 06 октября 2011

Итак, я сделал это:

    Rect rectangle = new Rect();
    getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle);
    if(android.os.Build.VERSION.SDK_INT < 9  /* android.os.Build.VERSION_CODES.GINGERBREAD */ ) {
        // /6647064/getwindowvisibledisplayframe-daet-raznye-znacheniya-v-android-2-2-2-3-no-ne-2-3-3#6647078
        rectangle.top = 0;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...