Максимально используйте экран предварительного просмотра во время итеративной разработки
В новой версии Android Studio Electric Eel поддержка составных предварительных просмотров получила новые функции, такие как определение размера устройства Android, несколько предварительных просмотров с определением класса, примеры источников данных и многое другое.
Composable Previews дает вам возможность увидеть фактическое состояние ваших компонуемых объектов без эмулятора. Таким образом, разработчик может быстрее выполнять итерации с различными настройками и достигать конечного желаемого компонуемого представления.
Основное использование
Если в Android Studio создается новый составной объект, под ним создается вторая функция с тегом @Preview
, которая служит отправной точкой для ваших предварительных просмотров. Следующий экран используется в качестве примера создания улучшенных превью.
Если в наш компонуемый добавить нужные параметры, мы получим следующий результат. Если превью отсутствует в вашем компонуемом файле, начните писать prev
и появится подсказка от Android Studio. Нажав Enter, Android Studio сгенерирует весь необходимый код.
@Preview @Composable fun WelcomeScreenPreview() { AppTheme { val navController = rememberNavController() WelcomeScreen(navController = navController) } }
Чтобы сделать его более реалистичным, мы можем добавить пару параметров в файл @Preview
.
showBackground
— фон устройства заливается цветом по умолчанию или по параметруcolorBackground
backgroundColor
— это 32-битный цвет ARGB в формате Long. Вам нужно вручную умножить шестнадцатеричное представление цвета на длинное число, потому что это число должно быть константой компилятора.showSystemUi
— показывает нижнюю навигационную верхнюю панель со временемname
— показывает пользовательское имя для предварительного просмотраapiLevel
— какая целевая версия Android должна использоватьсяfontScale
— масштабирование шрифта исходя из настроек телефонаlocale
— изменить используемую локаль представлениемuiMode
— может изменить цветовую маскировку пользовательского интерфейса в соответствии с выбором (например, в темный режим)
@Preview( showBackground = true, backgroundColor = 256 * 256 * 256, // R * G * B showSystemUi = true, name = "Welcome Screen", fontScale = 1f, local = "en" apiLevel = Build.VERSION_CODES.TIRAMISU, uiMode = Configuration.UI_MODE_TYPE_NORMAL )
Чтобы избежать интеграции фона, поместите в свое дерево компоновки
Surface
,Scaffold
или другой компонуемый фон, и он создаст фон для вас.
Размер предварительного просмотра
@Preview
реализует изменение размера экрана. Экран может быть предварительно просмотрен на нескольких размерах экрана одновременно. Вы также можете выбрать предустановленные устройства или свою ширину и высоту. Написание id
или spec
внутри строки покажет подсказки.
// for defining the specific device - names are checked by IDE @Preview(device = "id:pixel_5") // for defining the screen specifications - values are checked by IDE too @Preview(device = "spec:width=411dp,height=891dp,dpi=410,orientation=portrait")
Повторное использование настроек предварительного просмотра
Теги предварительного просмотра можно объединить в один класс и переназначить для любого другого представления. Создавать несколько превью для одного компонуемого больше не нужно. Чтобы создать несколько конфигураций экрана, необходимо определить annotation class
:
@Preview(device = "id:pixel_5") @Preview(device = "id:pixel") // you can add any number of previews together annotation class MultipleScreenSizePreview @MultipleScreenSizePreview @Composable fun WelcomeScreenPreview() { AppTheme { Surface { val navController = rememberNavController() WelcomeScreen(navController = navController) } } }
Не стесняйтесь смешивать различные устройства и спецификации размера экрана.
Вы также можете смешивать свои пользовательские классы!
// set of bright screens @Preview(device = "id:pixel_5") @Preview(device = "id:pixel") annotation class BrightScreens // set of dark screens @Preview(device = "id:pixel_5", uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(device = "id:pixel", uiMode = Configuration.UI_MODE_NIGHT_YES) annotation class DarkScreens // combination of previews @BrightScreens @DarkScreens @Composable fun WelcomeScreenPreview() { AppTheme { Surface { val navController = rememberNavController() WelcomeScreen(navController = navController) } } }
Добавление образца данных для предварительного просмотра
Составляющим нужны некоторые данные для отображения или состояние для отображения. В большинстве случаев достаточно передать один-два параметра вручную. Однако, если нужно передать много состояний или больших данных, код заполняется всеми входными данными.
Предварительный просмотр позволяет нам создать поставщик данных, в котором данные могут быть разделены, загружены и переданы в предварительный просмотр.
Вот пример экрана, который может идти между состояниями загрузки, успеха и ошибки.
Вот доступные состояния:
sealed class MainState { object LoadingState : MainState() object SuccessState : MainState() object ErrorState : MainState() }
Чтобы создать PreviewParameterProvider<T>
, поставщику необходимо реализовать этот интерфейс и определить класс данных. Вот вам и удобство запечатанных классов.
class MainStateProvider : PreviewParameterProvider<MainState> { override val values = sequenceOf( MainState.LoadingState, MainState.SuccessState, MainState.ErrorState, ) }
Поле Values
переопределено и дает нам место для размещения наших пользовательских данных. Для каждой записи поставщик создаст новый предварительный просмотр. Входной параметр аннотируется нашим провайдером @PreviewParameter(MainStateProvider::class)
, а компилятор позаботится обо всем остальном.
@Preview(device = "id:pixel_5") @Composable fun MainScreenPrev(@PreviewParameter(MainStateProvider::class) state: MainState) { MainScreen(state) }
Использование не ограничивается штатами. Изучите другие подходы к предварительному просмотру экрана с различными входными данными и только с одним провайдером.
Последние мысли
- Предварительные просмотры позволяют быстро просматривать изменения, повторять и сравнивать представления без запуска эмулятора.
- Создание превью заставит вас хранить отдельные логику и пользовательский интерфейс, потому что это займет меньше времени.
- Чтобы получить мгновенную обратную связь по нескольким конфигурациям устройств в одной сетке.
- Предварительные просмотры могут создавать изображения, щелкая по ним правой кнопкой мыши. Изображениями можно поделиться с другими разработчиками или менеджерами для быстрой обратной связи.
- К сожалению, предварительные версии не заменяют тестирование пользовательского интерфейса и сквозное тестирование.
- Будь проще!
Спасибо за прочтение!
Ресурсы
Поддержка Android Studio для Compose | Реактивный ранец Сочинить | Разработчики Android
Android Studio предлагает множество новых функций специально для Jetpack Compose. Он использует подход «сначала код, в то время как…developer.android.com»