Моя активность отображается под полупрозрачной строкой состояния.
Я получаю высоту окна, используя:
WindowManager manager = activity.getWindowManager();
DisplayMetrics metrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
Эта высота правильная, включая высоту содержимого и высоту строки состояния, так как я рисую там, и у моего окна правильные флаги.
В многооконном режиме в Nougat, если мое приложение является верхним, оно все еще рисует под строкой состояния, но height
не будет включать это значение.
Как получить реальную высоту окна в многооконном режиме, не запачкавшись?
Примечание
Я не хочу, чтобы высота экрана возвращалась, например. с помощью Display.getRealSize(). Мне нужна высота окна. Но если мое окно рисуется под строкой состояния, значение должно включать высоту строки состояния, как это происходит, когда многооконный режим отключен.
Больше информации
На самом деле, после перехода в многооконный режим значение height
никогда не будет включать строку состояния, даже если вы после этого выйдете из многооконного режима. Например, на Nexus5X:
// Start the app in normal mode
height = 1794; // Everything except nav bar. OK!
// Go in multi-window mode.
// Go out of multi-window mode.
height = 1730; // Status bar height is not there anymore. :-(
Похоже на грязного грязного жука. В этом случае мне интересно, знает ли кто-нибудь об этом больше (устройства, уровни API, отчет об ошибках).