Element typu „composable” jest definiowany przez funkcję i oznaczony znacznikiem @Composable
:
@Composable fun SimpleComposable() { Text("Hello World") }
Aby włączyć podgląd tego elementu, utwórz inny element z adnotacją @Composable
i @Preview
. Ta nowa, opatrzona adnotacjami kompozycja zawiera teraz kompozycję utworzoną początkowo, SimpleComposable
:
@Preview @Composable fun SimpleComposablePreview() { SimpleComposable() }
Adnotacja @Preview
informuje Android Studio, że ten komponent powinien być wyświetlany w widoku projektu tego pliku. W trakcie wprowadzania zmian możesz na bieżąco sprawdzać zmiany w podglądzie komponentu.
Możesz dodać parametry ręcznie w kodzie, aby dostosować sposób renderowania obiektu @Preview
w Android Studio. Możesz nawet dodać adnotację @Preview
do tej samej funkcji wiele razy, aby wyświetlić podgląd kompozytowego komponentu z różnymi właściwościami.
Jedną z głównych zalet komponentów @Preview
jest to, że nie trzeba polegać na emulatorze w Android Studio. Możesz zaoszczędzić pamięć podczas uruchamiania emulatora, aby wprowadzić ostateczne zmiany w wyglądzie i działaniu, oraz wykorzystać możliwości @Preview
do łatwego wprowadzania i testowania drobnych zmian w kodzie.
Aby w pełni wykorzystać adnotację @Preview
, zdefiniuj ekrany pod kątem stanu, który jest przekazywany jako dane wejściowe, oraz zdarzeń, które są generowane.
Określ @Preview
Android Studio ma kilka funkcji, które rozszerzają możliwości podglądu kompozycyjnego. Możesz zmienić ich wygląd, wchodzić z nimi w interakcje lub wdrażać je bezpośrednio na emulatorze lub urządzeniu.
Wymiary
Domyślnie wymiary @Preview
są wybierane automatycznie do pakowania treści.
Aby ustawić wymiary ręcznie, dodaj parametry heightDp
i widthDp
. Te wartości są już interpretowane jako dp
, więc nie musisz dodawać do nich .dp
:
@Preview(widthDp = 50, heightDp = 50) @Composable fun SquareComposablePreview() { Box(Modifier.background(Color.Yellow)) { Text("Hello World") } }
Podgląd dynamicznych kolorów
Jeśli w aplikacji masz włączone dynamiczne kolory, użyj atrybutu wallpaper
, aby przełączać tapety i obserwować, jak interfejs reaguje na tapety wybrane przez różnych użytkowników. Wybierz jeden z motywów tapet dostępnych w klasie Wallpaper
. Ta funkcja wymaga wersji Compose 1.4.0 lub nowszej.
Korzystanie z różnych urządzeń
W Android Studio Flamingo możesz edytować parametr device
adnotacji podglądu, aby definiować konfiguracje komponentów na różnych urządzeniach.
Jeśli parametr device zawiera pusty ciąg znaków (@Preview(device = "")
), możesz wywołać autouzupełnianie, naciskając Ctrl
+ Space
. Następnie możesz ustawić
wartości każdego parametru.
W autouzupełnianiu możesz wybrać dowolną opcję urządzenia z listy, np. @Preview(device = "id:pixel_4")
. Możesz też podać urządzenie niestandardowe, klikając spec:width=px,height=px,dpi=int…
, aby ustawiać indywidualne wartości każdego parametru.
Aby zastosować, naciśnij Enter
, lub anulować za pomocą Esc
.
Jeśli ustawisz nieprawidłową wartość, deklaracja zostanie podkreślona na czerwono, a może być dostępna poprawka (Alt
+ Enter
(⌥ + ⏎ w przypadku systemu macOS) > Zastąp przez…). Inspection spróbuje zastosować poprawkę, która najbardziej przypomina Twoje dane wejściowe.
Język
Aby przetestować różne języki użytkownika, dodaj parametr locale
:
@Preview(locale = "fr-rFR") @Composable fun DifferentLocaleComposablePreview() { Text(text = stringResource(R.string.greeting)) }
Ustawianie koloru tła
Domyślnie kompozyt wyświetla się z przezroczystym tłem. Aby dodać tło, dodaj parametry showBackground
i backgroundColor
. Pamiętaj, że backgroundColor
to kolor ARGB Long
, a nie wartość Color
:
@Preview(showBackground = true, backgroundColor = 0xFF00FF00) @Composable fun WithGreenBackground() { Text("Hello World") }
interfejs systemu
Jeśli chcesz wyświetlić paski stanu i działania w podglądzie, dodaj parametr showSystemUi
:
@Preview(showSystemUi = true) @Composable fun DecoratedComposablePreview() { Text("Hello World") }
Tryb interfejsu
Parametr uiMode
może przyjmować dowolną z konstant Configuration.UI_*
i umożliwia zmianę działania podglądu. Możesz na przykład ustawić tryb nocny na podglądzie, aby sprawdzić, jak zareaguje motyw.
LocalInspectionMode
Aby sprawdzić, czy kompozyt jest renderowany w podglądzie (w ramach komponentu z możliwością inspekcji), możesz odczytać wartość z elementu LocalInspectionMode
CompositionLocal
. Jeśli kompozycja jest renderowana na podglądzie, LocalInspectionMode.current
zwraca wartość true
. Te informacje umożliwiają dostosowanie podglądu. Możesz na przykład wyświetlić w oknie podglądu obraz zastępczy zamiast rzeczywistych danych.
W ten sposób możesz też obejść ograniczenia. na przykład wyświetlanie przykładowych danych zamiast wywoływania żądania sieciowego.
@Composable fun GreetingScreen(name: String) { if (LocalInspectionMode.current) { // Show this text in a preview window: Text("Hello preview user!") } else { // Show this text in the app: Text("Hello $name!") } }
Wejdź w interakcję z urządzeniem @Preview
Android Studio udostępnia funkcje, które umożliwiają interakcję z zdefiniowanymi podglądami. Ta interakcja pomaga zrozumieć działanie podglądów w czasie działania i ułatwia poruszanie się po interfejsie za pomocą podglądów.
Tryb interaktywny
Tryb interaktywny umożliwia interakcję z podglądem w sposób podobny do tego, jak na urządzeniu z Twoim programem, np. na telefonie lub tablecie. Tryb interaktywny jest izolowany w sandboksie (czyli jest odizolowany od innych podglądów), gdzie możesz klikać elementy i wprowadzać dane użytkownika w podglądzie. To szybki sposób na przetestowanie różnych stanów, gestów, a nawet animacji komponentu.
Nawigacja po kodzie i szkice do skompilowania
Możesz najechać kursorem na podgląd, aby zobaczyć kontury elementów kompozycyjnych zawartych w środku. Kliknięcie zarysu kompozytowego powoduje przejście do definicji w widoku edytora.
Włącz podgląd
Możesz uruchomić określony @Preview
w emulatorze lub na fizycznym urządzeniu. Podgląd jest wdrożony w ramach tej samej aplikacji projektu co nowa Activity
, więc ma ten sam kontekst i te same uprawnienia. Nie wymaga pisania standardowego kodu z prośbą o uprawnienia, jeśli zostały już one przyznane.
Kliknij ikonę Uruchom podgląd obok adnotacji @Preview
lub u góry podglądu. Android Studio wdroży @Preview
na połączonym urządzeniu lub emulatorze.
Kopiuj renderowanie @Preview
Każdą wyrenderowaną podglądową kopię można skopiować jako obraz, klikając ją prawym przyciskiem myszy.
Wiele podglądów tej samej adnotacji @Preview
Możesz prezentować wiele wersji tego samego komponentu @Preview
z różnymi specyfikacjami lub różnymi parametrami przekazywanymi do komponentu. Dzięki temu możesz ograniczyć ilość kodu stałego, który w przeciwnym razie musiałbyś napisać.
Szablony z wieloma podglądami
androidx.compose.ui:ui-tooling-preview
1.6.0-alpha01+ wprowadza szablony interfejsu API Multipreview: @PreviewScreenSizes
, @PreviewFontScales
, @PreviewLightDark
i @PreviewDynamicColors
, dzięki czemu za pomocą jednego adnotacji możesz wyświetlić podgląd interfejsu tworzenia wiadomości w najczęstszych scenariuszach.
Tworzenie niestandardowych adnotacji dotyczących wielu podglądów
Dzięki funkcji podglądu zbiorczego możesz zdefiniować klasę adnotacji, która zawiera wiele adnotacji @Preview
z różnymi konfiguracjami. Dodanie tej adnotacji do funkcji składanej spowoduje automatyczne renderowanie wszystkich podglądów naraz. Możesz na przykład użyć tej adnotacji, aby wyświetlić podgląd wielu urządzeń, rozmiarów czcionek lub motywów jednocześnie bez powtarzania tych definicji dla każdego komponentu.
Zacznij od utworzenia własnej klasy adnotacji niestandardowej:
@Preview( name = "small font", group = "font scales", fontScale = 0.5f ) @Preview( name = "large font", group = "font scales", fontScale = 1.5f ) annotation class FontScalePreviews
Możesz użyć tej adnotacji niestandardowej w przypadku elementów kompozycyjnych w wersji testowej:
@FontScalePreviews @Composable fun HelloWorldPreview() { Text("Hello World") }
Aby utworzyć pełniejszy zestaw podglądów, możesz połączyć wiele adnotacji z wielokrotnie wyświetlanym podglądem i adnotacji z normalnym podglądem. Połączenie adnotacji w ramach widoku łączonego nie oznacza, że wyświetlane są wszystkie kombinacje. Zamiast tego każda adnotacja w ramach podglądu wielopoziomowego działa niezależnie i renderuje tylko swoje warianty.
@Preview( name = "Spanish", group = "locale", locale = "es" ) @FontScalePreviews annotation class CombinedPreviews @CombinedPreviews @Composable fun HelloWorldPreview2() { MaterialTheme { Surface { Text(stringResource(R.string.hello_world)) } } }
Mieszany podgląd wielu opcji (i normalny podgląd) umożliwia bardziej kompleksowe przetestowanie wielu właściwości w projektach na dużą skalę.
@Preview
i duże zbiory danych
Bardzo często zachodzi potrzeba przekazania dużego zbioru danych do podglądu kompozycyjnego. Aby to zrobić, po prostu prześlij przykładowe dane do funkcji Composable Preview, dodając parametr za pomocą adnotacji @PreviewParameter
.
@Preview @Composable fun UserProfilePreview( @PreviewParameter(UserPreviewParameterProvider::class) user: User ) { UserProfile(user) }
Aby podać przykładowe dane, utwórz klasę, która implementuje interfejs PreviewParameterProvider
i zwraca dane przykładowe jako sekwencję.
class UserPreviewParameterProvider : PreviewParameterProvider<User> { override val values = sequenceOf( User("Elise"), User("Frank"), User("Julia") ) }
Powoduje to wyrenderowanie 1 podglądu na element danych w sekwencji:
Możesz używać tej samej klasy dostawcy do wielu podglądów. W razie potrzeby ogranicz liczbę podglądów, ustawiając parametr limit.
@Preview @Composable fun UserProfilePreview2( @PreviewParameter(UserPreviewParameterProvider::class, limit = 2) user: User ) { UserProfile(user) }
Ograniczenia i sprawdzone metody
Android Studio wykonuje kod podglądu bezpośrednio w obszarze podglądu. Nie wymaga uruchamiania emulatora ani urządzenia fizycznego, ponieważ korzysta z przeniesionej części platformy Androida o nazwie Layoutlib
. Layoutlib
to niestandardowa wersja platformy Android, która została zaprojektowana do działania poza urządzeniami z Androidem. Celem biblioteki jest wyświetlanie w Android Studio podglądu układu, który jest bardzo zbliżony do renderowania na urządzeniach.
Ograniczenia podglądu
Ze względu na sposób renderowania podglądów w Android Studio są one nieskomplikowane i nie wymagają całej platformy Androida do ich renderowania. Ma to jednak pewne ograniczenia:
- Brak dostępu do sieci
- Brak dostępu do plików
- Niektóre interfejsy API
Context
mogą być niedostępne
Podglądy i ViewModels
Podczas korzystania z funkcji ViewModel
w funkcji kompozycji podgląd jest ograniczony. System podglądów nie jest w stanie tworzyć wszystkich parametrów przekazanych do ViewModel
, takich jak repozytoria, przypadki użycia czy menedżerowie. Jeśli ViewModel
korzysta z wstrzykiwania zależności (np. Hilt), system podglądów nie może utworzyć całego grafu zależności, aby stworzyć ViewModel
.
Gdy próbujesz wyświetlić podgląd kompozytowa z ViewModel
, Android Studio wyświetla błąd podczas renderowania danego kompozytowa:
Jeśli chcesz wyświetlić podgląd komponentu, który używa komponentu ViewModel
, utwórz inny komponent z parametrami z komponentu ViewModel
przekazanymi jako argumenty tego komponentu. Dzięki temu nie musisz wyświetlać podglądu komponentu, który korzysta z elementu ViewModel
.
@Composable
fun AuthorColumn(viewModel: AuthorViewModel = viewModel()) {
AuthorColumn(
name = viewModel.authorName,
// ViewModel sends the network requests and makes posts available as a state
posts = viewModel.posts
)
}
@Preview
@Composable
fun AuthorScreenPreview(
// You can use some sample data to preview your composable without the need to construct the ViewModel
name: String = sampleAuthor.name,
posts: List<Post> = samplePosts[sampleAuthor]
) {
AuthorColumn(...) {
name = NameLabel(name),
posts = PostsList(posts)
}
}
Klasa adnotacji @Preview
W Android Studio możesz zawsze kliknąć @Preview
w Android Studio, aby wyświetlić pełną listę parametrów, które można dostosować podczas dostosowywania podglądu.
annotation class Preview( val name: String = "", val group: String = "", @IntRange(from = 1) val apiLevel: Int = -1, val widthDp: Int = -1, val heightDp: Int = -1, val locale: String = "", @FloatRange(from = 0.01) val fontScale: Float = 1f, val showSystemUi: Boolean = false, val showBackground: Boolean = false, val backgroundColor: Long = 0, @UiMode val uiMode: Int = 0, @Device val device: String = Devices.DEFAULT, @Wallpaper val wallpaper: Int = Wallpapers.NONE, )
Dodatkowe materiały
Więcej informacji o tym, jak Android Studio promuje łatwość obsługi @Preview
, i więcej wskazówek na temat narzędzi znajdziesz na blogu Compose Tooling.
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy obsługa JavaScript jest wyłączona
- Dane ograniczone do lokalizacji za pomocą CompositionLocal
- Material Design 2 w Compose
- Korzystanie z widoków w sekcji Tworzenie wiadomości