Android: увеличение в ландшафтном режиме, но не в портретном - PullRequest
0 голосов
/ 14 января 2012

У меня есть ситуация, когда я поднимаю палитру цветов. Если это сделано в портретном режиме, то все в порядке. Но если я делаю это в альбомном режиме (диалоговое окно не помещается на экране), оно, кажется, взрывается при попытке надуть макет.

Есть ли какой-то особый способ сделать это в ландшафтном режиме, когда вид не полностью умещается на экране?

Какие различия мне нужно учитывать, кроме экранной недвижимости?

1 Ответ

1 голос
/ 15 января 2012

CraigA,

После прочтения ваших комментариев кажется, что существует недопонимание того, как в XML генерируются различные значения ширины и высоты.Поначалу это распространенное заблуждение.Итак, здесь нужно понимать, что ширина различных объектов, хотя и динамическая, накладывает на ваши объекты различное поведение.

layout_width / layout_height обычно

Ширинаи параметры высоты не влияют на фактическую ширину и высоту объекта.Они влияют на ширину и высоту дисплея.Это означает, что вы можете установить ширину и высоту меньше содержимого, и содержимое будет по-прежнему доступно при прокрутке, если оно больше контейнера.

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

match_parent / fill_parent

Обычно это означает, что текущийВид получит свой размер от родителя.Если представление является представлением верхнего уровня, поведение изменяется незначительно.Если это будет вид диалога верхнего уровня, то это будет размер экрана или размер содержимого (в зависимости от того, что меньше).Если представление является представлением верхнего уровня действия, то результаты совпадают, но они выглядят разными.То есть он будет иметь полную непрозрачность Activity и фон, но размер View будет соответствовать только размеру содержимого или размера экрана (в зависимости от того, что меньше).Размеры детей не изменяются, если только их ширина / высота не зависит от размера этого вида.

wrap_content

В этом случае высота дисплея зависит от высоты дисплеявсех ближайших детей.Это поведение распространяется вплоть до самых младших потомков, пока иерархия не использует что-то отличное от wrap_content.

Ваша проблема (как она выглядит сейчас)

В вашем представлении верхнего уровня используется wrap_content, поэтому размер дисплея будет зависеть от всех размеров дисплея детей.В этом случае может быть лучше использовать match_parent' or fill_parent` (зависит от вашего API) только для просмотра на верхнем уровне.Это, по крайней мере, приведет к тому, что диалог будет иметь соответствующий размер, если не содержимое.Для тех элементов управления, размер которых основан на представлении верхнего уровня, они будут приведены в соответствие.Те, которые не должны быть скорректированы вручную.

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

Если вы используете два файла, у вас будет папка с именем layout_port для сохранения текущего файла.Вы добавите папку с именем layout_land для скорректированной.Они будут иметь одно и то же имя, просто размещенные в отдельных папках.

Надеюсь, это поможет,

FuzzicalLogic

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