Черный экран при вызове Activity.setRequestedOrientation (...) в Android - PullRequest
0 голосов
/ 12 февраля 2019

Кто-нибудь знает, как справиться с проблемой?Использование метода android.app.Activity#setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE) почти всегда приводит к отображению черного экрана в течение доли секунды во время вращения.

Но если я поверну сам смартфон, то черный экран никогда не появится.Как избавиться от черного экрана?Это проблема Android в методе setRequestedOrientation(), или я что-то не так делаю?

РЕДАКТИРОВАТЬ: AFAIK черный экран с вызовом setRequestedOrientation() может произойти, если у нас довольно тяжелая раскладка, когда это занимает некоторое времяинициализировать его в потоке пользовательского интерфейса.Если вы попытаетесь вызвать setRequestedOrientation(), например, в «Hello World!»приложение с легким макетом, вы не увидите черный экран.Таким образом, загрузка в потоке пользовательского интерфейса может быть причиной появления черного экрана при повороте с setRequestedOrientation().Но, с другой стороны, почему он никогда не появляется, когда я поворачиваю экран, меняя ориентацию телефона?

1 Ответ

0 голосов
/ 18 февраля 2019

Единственное решение, которое я нашел.Предположим, я хочу повернуть экран в альбомную ориентацию и что мне делать:

  1. Я удаляю корневой фрагмент с тяжелыми предметами из действия, которое я хочу повернуть.
  2. Внутри действия, которое я хочучтобы повернуть, я на мгновение открываю пустую белую активность, чтобы закрыть черный экран.Операция вызывает setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE) в своем onCreate обратном вызове и закрывается после истечения времени ожидания = 500 мс.Я открываю / закрываю Activity с анимацией постепенного появления / исчезновения.
  3. Внутри Activity, которую я хочу повернуть, я вызываю setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE) post с задержкой в ​​100 мс.Это начинает вращение.
  4. После завершения вращения, в onCreate я добавляю удаленный фрагмент обратно.

Вот и все.Поворот к ландшафту завершен, и черный экран полностью покрыт.

...