Как исправить положение элементов LinearLayout после настройки видимости?

У меня есть linearLayout, содержащий два FrameLayout. Я установил для одного из них видимость УШЕЛ, когда использую ландшафтный режим. И когда я возвращаюсь в портретный режим, я устанавливаю видимость ВИДИМЫЙ. Я использую УШЕЛ, потому что мне не нужно зарезервированное место невидимого элемента.

Результат:

При возврате в портретный режим два FrameLayout меняют положение.

Случаи:

  • Когда я выбираю первый frameLayout для перехода в альбомную ориентацию, второй меняет положение.
  • Когда я выбираю второй frameLayout для перехода в альбомную ориентацию, первая меняет положение.

разместите исходный код там, где вы видите или пропали макеты

Fazal Hussain 21.08.2018 18:00

Я просто делаю frame1.setVisibility (View.VISIBLE); frame2.setVisibility (View.GONE); Я не могу опубликовать код там, где установил, потому что он слишком длинный и находится в разных местах. не имеет отношения к XML?

Walid 21.08.2018 18:04

Вам нужно будет предоставить пример минимальный воспроизводимый пример, демонстрирующий то, что вы видите.

Mike M. 21.08.2018 18:28

@risefire опубликуйте свой комментарий в качестве ответа, чтобы я мог принять его как ответ. Вы спасли меня.

Walid 22.08.2018 09:20
2
4
186
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это из официальный документ:

GONE: Completely hidden, as if the view had not been added.

Итак, когда вы устанавливаете FrameLayout снова видимым, это как если бы вы добавляли его снова, и он занимает последнюю позицию.

Я рекомендую вам удалить и добавить представление вместо того, чтобы делать его видимым и исчезать. Когда вы добавляете его, используйте метод addView с параметром index, чтобы он занял первую позицию:

 linearLayout.addView(frameLayout,0);
Ответ принят как подходящий

вы можете попробовать использовать constraintlayout вместо linearlayout и поставить рекомендации

Другие вопросы по теме