Element składany jest definiowany przez funkcję i opatrzony adnotacją @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 miarę wprowadzania zmian możesz na bieżąco sprawdzać aktualizacje w podglądzie komponentu.
Aby dostosować sposób renderowania @Preview
w Android Studio, możesz ręcznie dodawać parametry do kodu. 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 oferuje kilka funkcji umożliwiających rozszerzenie podglądów komponentów. 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, aby owinąć zawartość.
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 tapety oferowanych przez klasę 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 poszczególnych parametrów.
W autouzupełnianiu możesz wybrać dowolną opcję urządzenia z listy, np. @Preview(device = "id:pixel_4")
. Możesz też wpisać niestandardowe urządzenie, wybierając spec:width=px,height=px,dpi=int…
, aby ustawić poszczególne 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 ustawienia językowe użytkowników, 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ą stałą Configuration.UI_*
i umożliwia zmianę działania podglądu. Możesz na przykład ustawić podgląd w trybie nocnym, aby sprawdzić, jak reaguje 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 w podglądzie, LocalInspectionMode.current
ma 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. Dzięki tej interakcji możesz lepiej zrozumieć zachowanie podglądów w czasie wykonywania oraz łatwiej poruszać 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 odizolowany w sandboksie (czyli odizolowany od innych podglądów), w którym 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ć zarysy zawartych w nim komponentów. 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 wdrażany w ramach tej samej aplikacji projektu co nowy 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żdy wyrenderowany podgląd można skopiować jako obraz, klikając go 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. W ten sposób 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 Compose w popularnych scenariuszach.
Tworzenie niestandardowych adnotacji podglądu zbiorczego
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. Za pomocą tej adnotacji możesz na przykład wyświetlić podgląd wielu urządzeń, rozmiarów czcionek lub motywów jednocześnie, nie powtarzając tych definicji w przypadku 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
W przypadku elementów do wyświetlania w podglądzie możesz użyć tej adnotacji niestandardowej:
@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)) } } }
Dzięki możliwości mieszania i dopasowywania elementów w podglądzie kilku rozmiarów (i w podglądzie normalnym) możesz dokładniej testować wiele właściwości projektów o większej skali.
@Preview
i duże zbiory danych
Często pojawia się potrzeba przekazania dużego zbioru danych do podglądu kompozytowego. 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") ) }
W ten sposób renderowany jest jeden podgląd na każdy 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 Android 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 lekkie i nie wymagają całego frameworku Androida. 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
Podglądy są ograniczone, gdy używasz ViewModel
w komponowalnym. 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 funkcji 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
Aby dowiedzieć się więcej o tym, jak Android Studio ułatwia @Preview
korzystanie z programu, oraz uzyskać więcej wskazówek dotyczących narzędzi, przeczytaj blog 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