Styl tekstu

Funkcja Text ma kilka opcjonalnych parametrów, które umożliwiają stylizowanie jej zawartości. Poniżej znajdziesz listę parametrów, które obejmują najczęstsze przypadki użycia tekstu. Wszystkie parametry funkcji Text znajdziesz w kodzie źródłowym funkcji Compose Text.

Gdy ustawisz jeden z tych parametrów, styl zostanie zastosowany do całej wartości tekstowej. Jeśli chcesz zastosować wiele stylów w tym samym wierszu lub akapicie, zapoznaj się z sekcją dotyczącą wielu stylów wbudowanych.

Typowe style tekstu

W sekcjach poniżej znajdziesz opis typowych sposobów formatowania tekstu.

Zmiana koloru tekstu

@Composable
fun BlueText() {
    Text("Hello World", color = Color.Blue)
}

Słowa

Zmiana rozmiaru tekstu

@Composable
fun BigText() {
    Text("Hello World", fontSize = 30.sp)
}

Słowa

Zapisywanie tekstu kursywą

Użyj parametru fontStyle, aby zapisać tekst kursywą (lub ustawić inny FontStyle).

@Composable
fun ItalicText() {
    Text("Hello World", fontStyle = FontStyle.Italic)
}

Słowa

Pogrubianie tekstu

Użyj parametru fontWeight, aby pogrubić tekst (lub ustawić inny FontWeight).

@Composable
fun BoldText() {
    Text("Hello World", fontWeight = FontWeight.Bold)
}

Słowa

Dodaj cień

Parametr style umożliwia ustawienie obiektu typu TextStyle i skonfigurowanie wielu parametrów, np. cienia. Shadow otrzymuje kolor cienia, przesunięcie lub położenie względem Text oraz promień rozmycia, który określa, jak bardzo jest rozmyty.

@Composable
fun TextShadow() {
    val offset = Offset(5.0f, 10.0f)
    Text(
        text = "Hello world!",
        style = TextStyle(
            fontSize = 24.sp,
            shadow = Shadow(
                color = Color.Blue, offset = offset, blurRadius = 3f
            )
        )
    )
}

Słowa

Dodawanie wielu stylów w tekście

Aby ustawić różne style w ramach tego samego elementu Text, użyj elementu AnnotatedString, czyli ciągu znaków, który można opatrzyć adnotacjami o dowolnych stylach.

AnnotatedString to klasa danych, która zawiera:

  • Wartość Text
  • Wartość List równa SpanStyleRange, co odpowiada stylowi wbudowanemu z zakresem pozycji w wartości tekstowej.
  • List ParagraphStyleRange, który określa wyrównanie tekstu, kierunek tekstu, wysokość wiersza i styl wcięcia tekstu.

Funkcja TextStyle jest przeznaczona do użycia w funkcji Text, a funkcje SpanStyleParagraphStyle są przeznaczone do użycia w funkcji AnnotatedString. Więcej informacji o wielu stylach w akapicie znajdziesz w artykule Dodawanie wielu stylów w akapicie.

AnnotatedString ma bezpieczny pod względem typów buildAnnotatedString, który ułatwia tworzenie.

@Composable
fun MultipleStylesInText() {
    Text(
        buildAnnotatedString {
            withStyle(style = SpanStyle(color = Color.Blue)) {
                append("H")
            }
            append("ello ")

            withStyle(style = SpanStyle(fontWeight = FontWeight.Bold, color = Color.Red)) {
                append("W")
            }
            append("orld")
        }
    )
}

Słowa

Użyj AnnotatedString.fromHtml(), aby wyświetlać w aplikacji Jetpack Compose tekst sformatowany w HTML-u z linkami, w które można kliknąć. Ta funkcja przekształca ciąg znaków z tagami HTML w AnnotatedString, co umożliwia stosowanie stylów i obsługę linków.

Przykład: HTML ze stylizowanym linkiem

Ten fragment kodu renderuje tekst sformatowany w HTML-u z linkiem, stosując do niego określony styl:

Najważniejsze informacje o kodzie
  • AnnotatedString.fromHtml() przekształca ciąg znaków htmlTextAnnotatedString. Parametr linkStyles dostosowuje wygląd linku.

  • TextLinkStyles określa styl linków w kodzie HTML. SpanStyle określa dekorację tekstu, styl czcionki i kolor linków.

  • Kompozycyjny element Text wyświetla wynikowy element AnnotatedString.

Wynik

Ten fragment kodu umożliwia wyświetlenie tekstu „Jetpack Compose” jako klikalnego linku w kolorze niebieskim, podkreślonego i napisanego kursywą:

Nagłówek H1 „Jetpack Compose” z tekstem „Twórz lepsze aplikacje za pomocą Jetpack Compose”, gdzie Jetpack Compose jest klikalnym linkiem w kolorze niebieskim, podkreślonym i pochylonym.
Rysunek 2. Nagłówek i akapit, w którym „Jetpack Compose” jest klikalnym, sformatowanym linkiem.

Włącz zaawansowane style za pomocą Brush

Aby włączyć bardziej zaawansowane style tekstu, możesz użyć interfejsu API Brush z TextStyle i SpanStyle. W każdym miejscu, w którym zwykle używasz tagu TextStyle lub SpanStyle, możesz teraz używać też tagu Brush.

Używanie pędzla do stylizowania tekstu

Skonfiguruj tekst za pomocą wbudowanego pędzla w TextStyle. Możesz na przykład skonfigurować pędzel linearGradient dla tekstu w ten sposób:

val gradientColors = listOf(Cyan, LightBlue, Purple /*...*/)

Text(
    text = text,
    style = TextStyle(
        brush = Brush.linearGradient(
            colors = gradientColors
        )
    )
)

Użycie funkcji `linearGradient` interfejsu Brush API ze zdefiniowaną listą kolorów.
Rysunek 3. Używanie funkcji linearGradient interfejsu Brush API ze zdefiniowaną listą kolorów.

Nie musisz ograniczać się do tego schematu kolorów ani stylu kolorowania. Podaliśmy prosty przykład, ale możesz użyć dowolnego z wbudowanych pędzli lub nawet samego SolidColor, aby ulepszyć tekst.

Integracje

Ponieważ możesz używać właściwości Brush razem z właściwościami TextStyleSpanStyle, integracja z TextFieldbuildAnnotatedString jest bezproblemowa.

Więcej informacji o korzystaniu z interfejsu Brush API w TextField znajdziesz w artykule Style input with Brush API (w języku angielskim).

Dodatkowe style za pomocą SpanStyle

Stosowanie pędzla do zakresu tekstu

Jeśli chcesz zastosować pędzel tylko do części tekstu, użyj interfejsów API buildAnnotatedStringSpanStyle oraz wybranego pędzla i gradientu.

Text(
    text = buildAnnotatedString {
        append("Do not allow people to dim your shine\n")
        withStyle(
            SpanStyle(
                brush = Brush.linearGradient(
                    colors = rainbowColors
                )
            )
        ) {
            append("because they are blinded.")
        }
        append("\nTell them to put some sunglasses on.")
    }
)

Używanie domyślnego pędzla z gradientem liniowym jako stylu tekstu.
Rysunek 4. Używanie domyślnego pędzla ze stylem linearGradient dla Text.
Przezroczystość w zakresie tekstu

Aby dostosować krycie określonego zakresu tekstu, użyj opcjonalnego parametru alphaSpanStyle. Użyj tego samego pędzla w przypadku obu części tekstu i zmień parametr alfa w odpowiednim zakresie. W przykładowym kodzie pierwszy zakres tekstu wyświetla się z przezroczystością na poziomie 50% (alpha =.5f), a drugi – z pełną przezroczystością (alpha = 1f).

val brush = Brush.linearGradient(colors = rainbowColors)

buildAnnotatedString {
    withStyle(
        SpanStyle(
            brush = brush, alpha = .5f
        )
    ) {
        append("Text in ")
    }
    withStyle(
        SpanStyle(
            brush = brush, alpha = 1f
        )
    ) {
        append("Compose ❤️")
    }
}

Używanie funkcji buildAnnotatedString i parametru alfa SpanStyle oraz funkcji linearGradient do dodawania krycia do zakresu tekstu.
Rysunek 5. Używanie parametru alfa w przypadku buildAnnotatedStringSpanStyle oraz linearGradient do dodawania nieprzezroczystości do fragmentu tekstu.

Zastosowywanie efektu markizy do tekstu

Modyfikator basicMarquee możesz zastosować do dowolnego komponentu, aby uzyskać animowany efekt przewijania. Efekt markizy występuje, gdy treść jest zbyt szeroka, aby zmieścić się w dostępnych ograniczeniach. Domyślnie basicMarquee ma ustawione określone konfiguracje (np. prędkość i opóźnienie początkowe), ale możesz zmodyfikować te parametry, aby dostosować efekt.

Poniższy fragment kodu implementuje podstawowy efekt markizy w funkcji kompozycyjnej Text:

@Composable
fun BasicMarqueeSample() {
    // Marquee only animates when the content doesn't fit in the max width.
    Column(Modifier.width(400.dp)) {
        Text(
            "Learn about why it's great to use Jetpack Compose",
            modifier = Modifier.basicMarquee(),
            fontSize = 50.sp
        )
    }
}

Rysunek 6. Modyfikator basicMarquee zastosowany do tekstu.

Dodatkowe materiały