Styl tekstu

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

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

Typowe style tekstu

W kolejnych sekcjach opisujemy typowe sposoby stylizowania tekstu.

Zmień kolor tekstu

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

Słowa

Zmień rozmiar tekstu

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

Słowa

Kursywa

Aby tekst był pisany kursywą (lub ustawić inny FontStyle), użyj parametru fontStyle.

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

Słowa

Pogrubienie

Aby tekst był pogrubiony (lub ustawić inny FontWeight), użyj parametru 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 przyjmuje kolor cienia, przesunięcie lub jego położenie względem elementu Text oraz promień rozmycia, który określa, jak rozmyty ma być cień.

@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 tym samym Text elemencie kompozycyjnym, użyj elementu AnnotatedString, czyli ciągu znaków, który można opatrzyć stylami dowolnych adnotacji.

AnnotatedString to klasa danych zawierająca:

  • wartość Text
  • List elementu SpanStyleRange, który odpowiada stylowi w tekście z zakresem pozycji w wartości tekstowej
  • List elementu ParagraphStyleRange, który określa wyrównanie tekstu, kierunek tekstu, wysokość wiersza i styl wcięcia tekstu

TextStyle jest używany w elemencie kompozycyjnym Text, a elementy SpanStyle i ParagraphStyle – w elemencie AnnotatedString. Więcej informacji o wielu stylach w akapicie znajdziesz w artykule Dodawanie wielu stylów w akapicie.

AnnotatedString ma bezpieczny typowo kreator który ułatwia tworzenie: buildAnnotatedString.

@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

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

Przykład: HTML ze stylizowanym linkiem

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

Najważniejsze informacje o kodzie
  • AnnotatedString.fromHtml() przekształca ciąg znaków htmlText w element AnnotatedString. Parametr linkStyles umożliwia dostosowanie wyglądu linku.

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

  • Element kompozycyjny Text wyświetla wynikowy element AnnotatedString.

Wynik

Ten fragment kodu umożliwia kliknięcie linku „Jetpack Compose” stylizowanego na niebieski, podkreślony i pisany kursywą:

Nagłówek H1 „Jetpack Compose” z tekstem „Twórz lepsze aplikacje za pomocą Jetpack Compose”, gdzie Jetpack Compose to klikalny link w kolorze niebieskim, podkreślony i pisany kursywą.
Rysunek 2. Nagłówek i akapit, w którym „Jetpack Compose” w akapicie jest klikalnym, stylizowanym linkiem.

Włączanie zaawansowanego stylizowania za pomocą elementu Brush

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

Używanie pędzla do stylizowania tekstu

Skonfiguruj tekst za pomocą wbudowanego pędzla w elemencie TextStyle. Możesz na przykład skonfigurować pędzel linearGradient w tekście 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 konkretnego schematu kolorów ani stylu kolorowania. Aby wyróżnić tekst, możesz użyć dowolnego z wbudowanych pędzli lub nawet tylko elementu SolidColor.

Integracje

Ponieważ możesz używać elementu Brush zarówno z elementem TextStyle, jak i SpanStyle, integracja z elementem TextField i funkcją buildAnnotatedString jest bezproblemowa.

Więcej informacji o używaniu interfejsu Brush API w elemencie TextField znajdziesz w artykule Stylizowanie danych wejściowych za pomocą interfejsu Brush API.

Dodatkowe stylizowanie za pomocą elementu SpanStyle

Stosowanie pędzla do fragmentu tekstu

Jeśli chcesz zastosować pędzel tylko do części tekstu, użyj buildAnnotatedString i interfejsu SpanStyle API wraz z wybranym pędzlem i gradientem.

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 z elementem linearGradient jako stylu elementu Text.
Przezroczystość w fragmencie tekstu

Aby dostosować przezroczystość określonego fragmentu tekstu, użyj SpanStyle's opcjonalnego alpha parametru. Użyj tego samego pędzla w obu częściach tekstu i zmień parametr alfa w odpowiednim fragmencie. W przykładowym kodzie pierwszy fragment tekstu jest wyświetlany z przezroczystością na poziomie połowy (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 elementów buildAnnotatedString i SpanStyle wraz z elementem linearGradient w celu dodania przezroczystości do fragmentu tekstu.

Stosowanie efektu markizy do tekstu

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

Ten fragment kodu implementuje podstawowy efekt markizy w elemencie kompozycyjnym 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