Android макет больше экрана - PullRequest
0 голосов
/ 04 февраля 2020

Моя проблема в том, что компоненты внутри ConstraintLayout выпадают из экрана. Мое приложение всегда работало, и я не вносил изменения в эти макеты в последнее время. Теперь кнопки и виды смещены вправо и вниз. Ограничения на компоненты действуют так, как если бы макет был больше. Внезапно эта проблема появилась на S10, S9 и A70 без обновления приложения.

Снимок экрана ошибки

enter image description here

Снимок экрана обычного экрана

enter image description here

После создания снимка экрана макет несколько возвращается в нормальное состояние

enter image description here

Предполагается, что кнопка воспроизведения центрируется по 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);

Однако это не сработало.

В одном действии, в котором обнаружена эта ошибка, нет больше кода, связанного с пользовательским интерфейсом, чем показано здесь, поэтому я не думаю, что ошибка в моем коде, как приложение работает в течение нескольких месяцев.

1 Ответ

0 голосов
/ 05 февраля 2020

Я решил свою проблему. В некотором смысле мое приложение использовало бета-версию ConstraintLayout.

Я просто изменил свои зависимости с:

implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'

С самой последней найденной версией ConstraintLayout здесь, что:

implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...