Моя проблема в том, что компоненты внутри ConstraintLayout выпадают из экрана. Мое приложение всегда работало, и я не вносил изменения в эти макеты в последнее время. Теперь кнопки и виды смещены вправо и вниз. Ограничения на компоненты действуют так, как если бы макет был больше. Внезапно эта проблема появилась на S10, S9 и A70 без обновления приложения.
Снимок экрана ошибки
Снимок экрана обычного экрана
После создания снимка экрана макет несколько возвращается в нормальное состояние
Предполагается, что кнопка воспроизведения центрируется по x и y. Ограничение все в 0 с родительским представлением. Кнопка удаления рекламы ограничена влево и вправо одинаково и только сверху. Массив кнопок внизу находится внутри вида, который одинаково ограничен слева и справа и только снизу.
Одна вещь, которую я заметил, это то, что на моем S10 настройки дисплея либо 3040x1440 или 2280x1080. В настоящее время он установлен на 3040x1440. Кажется, что компоненты смещены вправо настолько, чтобы соответствовать, как если бы они были в центре 3040x1440, но мы видим только первые 2280x1080 пикселей экрана.
Эта проблема также совпадает с тем, что приложение теперь отображается с игровой навигационной панелью внизу. Я никогда не видел свое приложение с этой панелью навигации раньше. На трех телефонах, которые демонстрируют эту проблему, игровая навигационная панель никогда не появлялась до сих пор, и проблема начала возникать, как только панель была введена. У меня не было контроля над этим.
Один из способов вернуться к желаемому нормальному макету - выйти из приложения и вернуться в приложение через недавно открытые приложения или через значок приложения. Тогда раскладка нормальная, пока я не поменяю активность. Затем следующее действие также выплескивается.
Все действия в приложении установлены на "портрет" в манифесте. Все мои действия используют ConstraintLayout в качестве основного макета, но не все действия сталкиваются с этой проблемой.
Когда об этой ошибке впервые сообщили, я попытался воспроизвести ее. Единственный способ воспроизвести ошибку - открыть приложение в режиме разделенного экрана, открыть второе приложение, повернуть устройство в горизонтальное положение и затем закрыть второе приложение, расширив свое приложение. Тот факт, что телефон перешел из альбомной ориентации в портретную и полноэкранную, заставил его демонстрировать тот ассортимент, который вы видите здесь.
Я думаю, что это связано с обновлением игровой навигационной панели, потому что буквально ничего не изменилось в приложении между вчера и сегодня и теперь эта проблема существует.
Что я пробовал:
Я пытался не скрывать панель навигации и не делать приложение полноэкранным, комментируя этот код:
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
Это не работало, игровая навигационная панель присутствовала, а пользовательский интерфейс все еще появлялся.
Поскольку проблема, казалось, возникла из-за того, что приложение считало его горизонтальным, я попытался добавить это к затронутым действиям:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Однако это не сработало.
В одном действии, в котором обнаружена эта ошибка, нет больше кода, связанного с пользовательским интерфейсом, чем показано здесь, поэтому я не думаю, что ошибка в моем коде, как приложение работает в течение нескольких месяцев.