Получите правильный размер экрана на Galaxy S8

В моем приложении я сейчас использую windowManager.getDefaultDisplay() для определения размера экрана.

С новой панелью навигации Samsung S8, которую можно отображать и скрывать с помощью «точки» в левом нижнем углу, я получаю одинаковый размер экрана для отображаемой или скрытой панели навигации. Он всегда возвращает размер дисплея, как если бы отображалась панель навигации — я ожидаю получить 1080x2220, когда панель навигации скрыта, но всегда получается 1080x2076.

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


person Hadas Kaminsky    schedule 13.09.2017    source источник
comment
Я не слишком знаком с ситуацией, но есть ли способ получить панель навигации (например, getNavigationBar()) и проверить, есть ли isVisible() или нет? Если да, то можете ли вы получить высоту навигационной панели и добавить ее на экран? Или область навигации каким-то образом ограничена независимо от видимости?   -  person code_dredd    schedule 13.09.2017
comment
Пробовали ли вы использовать иммерсивный полноэкранный режим?   -  person Eselfar    schedule 14.09.2017


Ответы (2)


У меня была та же проблема, что и у вас, и решение, которое я нашел, заключалось в измерении высоты content root view:

findViewById(android.R.id.content).getHeight()

надеюсь, это поможет вам.

проверьте здесь для получения более подробной информации об android.R.id.content

person morH    schedule 27.09.2017

У меня также была такая же проблема, но решение с корневым представлением контента не сработало для меня (высота, которую я получил, была 2148).

Но я мог бы решить это с помощью decorview:

    //Get the correct screen size even if the device has a hideable navigation bar (e.g. the Samsung Galaxy S8)
    View decorView = getWindow().getDecorView(); //if you use this in a fragment, use getActivity before getWindow()
    Rect r = new Rect();
    decorView.getWindowVisibleDisplayFrame(r);
int screenHeight = r.bottom; // =2220 on S8 with hidden NavBar and =2076 with enabled NavBar
int screenWidth = r.right; // =1080 on S8
person Chris    schedule 19.06.2018