logo
Литература_1 / photon_old

Политика изменения размеров

Любые изменения виджета, которые могут оказать действие на объём пространства, требуемого для отображения его содержания, могут приводить к изменению размеров самого этого виджета, с тем чтобы вместить его содержание. На это влияет политика изменения размеров, назначенная виджету.

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

Политикой изменения размеров управляет ресурс Pt_ARG_RESIZE_FLAGS. Этот ресурс состоит из отдельного набора флагов для ширины и высоты. Значение флагов определяет условия, в которых виджет пересчитывает соответствующий размер. Значения проверяются каждый раз, когда виджет реализуется или изменяется его содержание.

 Если политика изменения размеров конфликтует с анкерами, Pt_ARG_RESIZE_FLAGS переписывает Pt_ARG_ANCHOR_OFFSETS и Pt_ARG_ANCHOR_FLAGS.

Имеются следующие флаги изменения размеров:

Pt_RESIZE_X_ALWAYS

Пересчитывает размер виджета всякий раз, когда изменяется значение размера x. Виджет растёт или сжимается в горизонтальном направлении в соответствии с изменением его содержания.

Например, следующий рисунок показывает кнопку с установленным флагом Pt_RESIZE_X_ALWAYS при изменении надписи с "Hello" к "Hello, world" и к "Hi".

Pt_RESIZE_Y_ALWAYS

Пересчитывает размер виджета всякий раз, когда изменяется значение размера y. Виджет растёт или сжимается в вертикальном направлении в соответствии с изменением его содержания.

Pt_RESIZE_XY_ALWAYS

Пересчитывает размер виджета всякий раз, когда изменяется значение размера x или y. Виджет растёт или сжимается в обоих направлениях в соответствии с изменением его содержания.

 Флаг Pt_RESIZE_XY_ALWAYS в PhAB не определён. Он представляется для Вашего удобства, когда установка флагов изменения размеров осуществляется из Вашего программного кода.

Pt_RESIZE_X_AS_REQUIRED

Пересчитывает размер виджета всякий раз при изменении размера x и не производит подгонку при наличии свободного пространства. Например, следующий рисунок показывает кнопку с установленным флагом Pt_RESIZE_X_AS_REQUIRED при изменении надписи с "Hello" к "Hello, world" и к "Hi".

Pt_RESIZE_Y_AS_REQUIRED

Пересчитывает размер виджета всякий раз при изменении размера y и не производит подгонку при наличии свободного пространства.

Pt_RESIZE_XY_AS_REQUIRED

Пересчитывает размер виджета всякий раз при изменении размера x или y и не производит подгонку при наличии свободного пространства.

 Флаг Pt_RESIZE_XY_AS_REQUIRED в PhAB не определён. Он предоставляется для Вашего удобства, когда установка флагов изменения размеров осуществляется из Вашего программного кода.

Эти флаги также могут быть модифицированы значениями другого набора флагов, а именно

 Флаг Pt_RESIZE_XY_INITIAL в PhAB не определён. Он предоставляется для Вашего удобства, когда установка флагов изменения размеров осуществляется из Вашего программного кода.

Если Вы установили какой-либо из этих "инициализирующих" флагов, виджет не будет изменять свои размеры в ответ на изменение данных – он изменяет свои размеры только в процессе согласования геометрии всякий раз, когда реализуется. Виджет либо делает себя в точности по размерам своего содержимого, либо увеличивается в размерах, чтобы разместить своё содержимое, если его размеры в этот момент недостаточно велики.

Если никакой из флагов изменения размеров не установлен, виджет не пытается расчитать свои собственные размеры, а использует те размеры, которые были установлены приложением (таким образом, возможно, обрезая в результате содержимое виджета).

Например, следующий рисунок показывает кнопку, у которой не установлены никакие флаги изменения размеров, при изменении надписи с "Hello" к "Hello, world" и к "Hi":

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4