У меня есть linearLayout, содержащий два FrameLayout. Я установил для одного из них видимость УШЕЛ, когда использую ландшафтный режим. И когда я возвращаюсь в портретный режим, я устанавливаю видимость ВИДИМЫЙ. Я использую УШЕЛ, потому что мне не нужно зарезервированное место невидимого элемента.
Результат:
При возврате в портретный режим два FrameLayout меняют положение.
Случаи:
Я просто делаю frame1.setVisibility (View.VISIBLE); frame2.setVisibility (View.GONE); Я не могу опубликовать код там, где установил, потому что он слишком длинный и находится в разных местах. не имеет отношения к XML?
Вам нужно будет предоставить пример минимальный воспроизводимый пример, демонстрирующий то, что вы видите.
@risefire опубликуйте свой комментарий в качестве ответа, чтобы я мог принять его как ответ. Вы спасли меня.
Это из официальный документ:
GONE: Completely hidden, as if the view had not been added.
Итак, когда вы устанавливаете FrameLayout снова видимым, это как если бы вы добавляли его снова, и он занимает последнюю позицию.
Я рекомендую вам удалить и добавить представление вместо того, чтобы делать его видимым и исчезать.
Когда вы добавляете его, используйте метод addView с параметром index, чтобы он занял первую позицию:
linearLayout.addView(frameLayout,0);
вы можете попробовать использовать constraintlayout вместо linearlayout и поставить рекомендации
разместите исходный код там, где вы видите или пропали макеты