[ad_1]

Автор: Джон Экенроде, технический писатель, разработка программного обеспечения
Выпуск 1.1.0-beta01 Jetpack WindowManager продолжает неуклонный прогресс библиотеки в сторону стабильного выпуска версии 1.1.0. В бета-версию добавлен ряд новых функций и возможностей, которые готовы к тестированию и внедрению уже сегодня!
Нам нужны ваши отзывы, чтобы мы могли сделать WindowManager лучше для вас. Добавьте в свое приложение зависимость 1.1.0-beta01, выполните приведенные ниже шаги миграции (если вы уже используете предыдущую версию библиотеки) и сообщите нам свое мнение!
Встраивание активности
androidx.window.embedding
Встраивание действий позволяет оптимизировать приложения с несколькими действиями для больших экранов. Версия 1.1.0-beta01 дополняет и реорганизует API, чтобы обеспечить большую гибкость, возможности и контроль при управлении разделением окон задач. Мы начали с экспериментальных API в версии 1.0.0 и продвигаем их до стабильной версии в версии 1.1.0.
тл;др
Добавлен параметр манифеста, чтобы вы могли сообщить системе, что ваше приложение реализовало встраивание действий. Рефакторинг Сплитконтроллер больше внимания уделять раздельным свойствам; извлечены API правил разделения для ПравилоКонтроллер и действия, встраивающие API в ActivityEmbeddingController. Добавлен Разделить атрибуты класс для описания встраивания разбиений. Добавлен ВстраиваниеAspectRatio класс, чтобы установить минимальное соотношение для применения правил встраивания активности. Изменены единицы измерения пикселей на независимые от дисплея пиксели (dp). Включена настройка разделенных макетов. В правила добавлен тег, чтобы разработчики могли идентифицировать определенные правила и управлять ими.
Что нового
PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED
- Добавлено как логическое свойство <приложение> тег в манифесте приложения.
ActivityEmbeddingController
- Добавлен класс для операций, связанных с
Activity
илиActivityStack
классы.
- Включает
isActivityEmbedded()
заменить API вSplitController
.
RuleController
- Добавлен класс для операций, связанных с EmbeddingRule класс и подклассы.
- Включает следующие API для замены API в Сплитконтроллер:
- добавитьправило() — Добавляет правило или обновляет правило с таким же тегом.
- удалитьПравило() — Удаляет правило из набора зарегистрированных правил.
- установить правила() — Устанавливает свод правил.
- очиститьПравила() — Удаляет все зарегистрированные правила.
- правила разбора() — Анализирует правила из определений правил XML.
SplitAttributes
- Добавлен класс для определения разделенного макета.
EmbeddingAspectRatio
- Добавлен класс для определения констант поведения, подобного перечислению, связанных с соотношением сторон экрана. Позволяет указать, когда разрешено разделение на основе соотношения сторон родительского окна.
Видеть Правило разделения для свойств, использующих константы.
Что изменилось
EmbeddingRule
- Добавлено поле тега для идентификации правил разделения.
SplitController
- Рефакторинг API для следующих модулей:
- ActivityEmbeddingController
- Взолнованный isActivityEmbedded() к ActivityEmbeddingController.
- ПравилоКонтроллер
- Удалены следующие API и заменены их функциональными возможностями на API RuleController:
- очистить зарегистрированные правила ()
- получитьразделенные правила()
- инициализировать()
- правило регистрации()
- unregisterRule
()
- Устаревший isSplitSupported() метод и заменен на splitSupportStatus свойство, чтобы предоставить более подробную информацию о том, почему функция разделения недоступна.
- получить экземпляр () метод теперь имеет Контекст параметр.
Примечание: получить экземпляр () методы ActivityEmbeddingController и ПравилоКонтроллер также есть Контекст параметр.
- Добавлен Разделить атрибуты Функции калькулятора для настройки разделенных макетов:
- setSplitAttributesCalculator()
- clearSplitAttributesCalculator()
- isSplitAttributesCalculatorSupported() чтобы проверить, является ли SplitAttributesCalculator API поддерживаются на устройстве.
- Определенный SplitSupportStatus вложенный класс для предоставления констант состояния для
splitSupportStatus
свойство. Позволяет изменить поведение приложения в зависимости от того, поддерживаются ли в текущей среде приложения разбиения внедрения действий.
SplitRule
- Добавлен defaultSplitAttributes свойство, которое определяет макет разделения по умолчанию; заменяет расщепление и layoutDirection.
-
Добавлен перевод свойств XML splitRatio и сплитмакетдиректион к defaultSplitAttributes.
-
Изменены определения минимального размера, чтобы использовать независимые от плотности пиксели (dp) вместо пикселей.
- Измененный минШирина к minWidthDp со значением по умолчанию 600dp.
- Измененный minSmallestWidth к minSmallestWidthDp со значением по умолчанию 600dp.
- Добавлен minHeightDp свойство со значением по умолчанию 600dp.
- Добавлен maxAspectRatioInHorizontal со значением по умолчанию ВСЕГДА ПОЗВОЛЯЮТ.
- Добавлен maxAspectRatioInPortrait со значением по умолчанию 1,4.
- Определенный FinishBehavior вложенный класс для замены констант поведения завершения.
- Применил изменения свойства к Строитель вложенный класс SplitPairRule и РазделитьПлейсхолдерПравило.
SplitInfo
- Заменены getSplitRatio() с получить сплитатрибутес () для предоставления дополнительной информации, связанной с разделением.
Макет окна
androidx.window.layout
Библиотека компоновки окон позволяет определить особенности окон отображения приложения. В выпуске 1.1.0-beta01 теперь вы можете работать не только в действиях, но и в других контекстах.
Что изменилось
WindowInfoTracker
- Добавлена поддержка контекста пользовательского интерфейса без активности в экспериментальной версии.
WindowMetricsCalculator
- Добавлена поддержка контекста пользовательского интерфейса без активности.
Шаги миграции
Сделайте следующий шаг и обновите свое приложение с предыдущей альфа-версии. И, пожалуйста, сообщите нам, как мы можем облегчить процесс обновления.
PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED
- Чтобы включить встраивание действий, приложения должны добавить свойство в тег
в манифесте приложения:
< свойство android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED" android:value="true" />
Если свойство имеет значение true, система может заранее оптимизировать поведение разделения для приложения.
SplitInfo
- Проверьте, сложен ли текущий сплит:
SplitInfo.splitAttributes.splitType — это SplitAttributes.SplitType.ExpandContainersSplitType.
if (SplitInfo.splitAttributes.splitType is SplitAttributes.SplitType.RatioSplitType) { val ratio = splitInfo.splitAttributes.splitType.ratio } else { // Соотношение не имеет смысла для других типов. }
SplitController
- SplitController.getInstance()
SplitController.getInstance(контекст)
- SplitController.initialize(Context, @ResId int)
изменения в:
RuleController.getInstance(Context).setRules(RuleController.parse(Context, @ResId int))
- SplitController.getInstance().isActivityEmbedded(активность)
изменения в:
ActivityEmbeddingController.getInstance(Context) .isActivityEmbedded(Activity)
- SplitController.getInstance().registerRule(правило)
изменения в:
RuleController.getInstance(контекст).addRule(правило)
- SplitController.getInstance().unregisterRule(правило)
изменения в:
RuleController.getInstance(Context).removeRule(правило)
- SplitController.getInstance().clearRegisteredRules()
изменения в:
RuleController.getInstance(Context).clearRules()
- SplitController.getInstance().getSplitRules()
изменения в:
RuleController.getInstance(Context).getRules()
SplitRule
- Изменять минШирина к minWidthDp и minSmallestWidth к minSmallestWidthDp
- minWidthDp и minSmallestWidthDp теперь используйте единицы dp вместо пикселей
Приложения могут использовать следующий вызов:
TypedValue.applyDimension( COMPLEX_UNIT_DIP, minWidthInPixels, resources.displayMetrics)
или просто разделить minWithInPixels к displayMetrics # плотность.
SplitPairRule.Builder
- SplitPairRule.Builder (фильтры, minWidth, minSmallestWidth)
изменения в:
SplitPairRule.Builder(filters) // Необязательно, если аргумент minWidthInDp равен 600. .setMinWidthDp(minWidthInDp) // Необязательно, если аргумент minSmallestWidthInDp равен 600. .setMinSmallestWidthDp(minSmallestWidthInDp)
- setLayoutDirection (layoutDirection) и setSplitRatio (соотношение)
изменить на:
setDefaultSplitAttributes(SplitAttributes.Builder() .setLayoutDirection(layoutDirection) .setSplitType(SplitAttributes.SplitType.ratio(ratio)) .build() )
- setFinishPrimaryWithSecondary и setFinishSecondaryWithPrimary взять FinishBehavior перечисляемые константы.
Видеть Правило разделения миграции для получения подробной информации.
setMaxAspectRatioInPortrait (EmbeddingAspectRatio.ALWAYS_ALLOW)
для отображения разделения на портретных устройствах.
SplitPlaceholder.Builder
- Имеет только фильтры и местозаполнительНамерение параметры; другие свойства перемещаются в сеттеры.
Видеть SplitPairRule.Builder миграции для получения подробной информации.
- setFinishPrimaryWithPlaceholder берет
Дополнительные сведения см. в разделе «Завершить миграцию поведения».
- setLayoutDirection (направление макета) и setSplitRatio (соотношение)
изменить на
setDefaultSplitAttributes(SplitAttributes.Builder() .setLayoutDirection(layoutDirection) .setSplitType(SplitAttributes.SplitType.ratio(ratio)) .build() )
Подробности см. в разделе миграция направления компоновки.
setMaxAspectRatioInPortrait (EmbeddingAspectRatio.ALWAYS_ALLOW)
для отображения разделения на портретных устройствах.
Завершить поведение
Константы поведения завершения должны быть перенесены в FinishBehavior
enum-подобные константы класса:
- FINISH_НИКОГДА изменения в FinishBehavior.НИКОГДА
- FINISH_ALWAYS изменения в FinishBehavior.ВСЕГДА
- FINISH_ADJACENT изменения в FinishBehavior.ADJACENT
Направление макета
Направление макета должно быть перенесено на SplitAttributes.LayoutDirection:
- лтр изменения в SplitAttributes.LayoutDirection.LEFT_TO_RIGHT
- ртл изменения в SplitAttributes.LayoutDirection.RIGHT_TO_LEFT
- место действия изменения в SplitAttributes.LayoutDirection.LOCALE
- расщепление мигрирует в SplitAttributes.SplitType.ratio(splitRatio)
Начать
Чтобы начать работу с WindowManager, добавьте репозиторий Google Maven в папку вашего приложения. настройки .градле или на уровне проекта build.gradle файл:
управление зависимостями {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
репозитории {
Google()
}
}
Затем добавьте зависимость 1.1.0-beta01 в файл build.gradle вашего приложения на уровне модуля:
зависимости {
реализация ‘androidx.window:window:1.1.0-beta01’
. . .
}
Удачного кодирования!
[ad_2]