Jetpack Compose umożliwia szczegółową interaktywność w aplikacji Text. Zaznaczanie tekstu jest teraz bardziej elastyczne i można je wykonywać w układach kompozycyjnych. Interakcje użytkownika z tekstem różnią się od innych układów funkcji kompozycyjnych, ponieważ nie można dodać modyfikatora do części funkcji kompozycyjnej Text. Na tej stronie znajdziesz interfejsy API,
które umożliwiają interakcje z użytkownikami.
Zaznacz tekst
Domyślnie nie można zaznaczać elementów kompozycyjnych, co oznacza, że użytkownicy nie mogą zaznaczać i kopiować tekstu z aplikacji. Aby włączyć zaznaczanie tekstu, umieść elementy tekstowe w elemencie kompozycyjnym SelectionContainer:
@Composable fun SelectableText() { SelectionContainer { Text("This text is selectable") } }
Możesz wyłączyć możliwość zaznaczania określonych części obszaru, który można zaznaczyć. Aby to zrobić, musisz umieścić część, której nie można zaznaczyć, w funkcji kompozycyjnej DisableSelection:
@Composable fun PartiallySelectableText() { SelectionContainer { Column { Text("This text is selectable") Text("This one too") Text("This one as well") DisableSelection { Text("But not this one") Text("Neither this one") } Text("But again, you can select this one") Text("And this one too") } } }
Tworzenie klikalnych sekcji tekstu za pomocą LinkAnnotation
Aby monitorować kliknięcia elementu Text, możesz dodać modyfikator clickable. Możesz jednak dołączyć dodatkowe informacje do określonej części wartości Text, np. adres URL dołączony do określonego słowa, który ma zostać otwarty w przeglądarce. W takich przypadkach musisz użyć LinkAnnotation, czyli adnotacji, która reprezentuje klikalną część tekstu.
Za pomocą LinkAnnotation możesz dołączyć adres URL do części funkcji kompozycyjnej Text, która automatycznie otwiera się po kliknięciu, jak pokazano w tym fragmencie kodu:
@Composable fun AnnotatedStringWithLinkSample() { // Display multiple links in the text Text( buildAnnotatedString { append("Go to the ") withLink( LinkAnnotation.Url( "https://developer.android.com/", TextLinkStyles(style = SpanStyle(color = Color.Blue)) ) ) { append("Android Developers ") } append("website, and check out the") withLink( LinkAnnotation.Url( "https://developer.android.com/jetpack/compose", TextLinkStyles(style = SpanStyle(color = Color.Green)) ) ) { append("Compose guidance") } append(".") } ) }
Możesz też skonfigurować działanie niestandardowe w odpowiedzi na kliknięcie przez użytkownika części funkcji kompozycyjnej Text. W tym fragmencie kodu, gdy użytkownik kliknie „Jetpack Compose”, wyświetli się link, a jeśli użytkownik go kliknie, zostaną zarejestrowane dane:
@Composable fun AnnotatedStringWithListenerSample() { // Display a link in the text and log metrics whenever user clicks on it. In that case we handle // the link using openUri method of the LocalUriHandler val uriHandler = LocalUriHandler.current Text( buildAnnotatedString { append("Build better apps faster with ") val link = LinkAnnotation.Url( "https://developer.android.com/jetpack/compose", TextLinkStyles(SpanStyle(color = Color.Blue)) ) { val url = (it as LinkAnnotation.Url).url // log some metrics uriHandler.openUri(url) } withLink(link) { append("Jetpack Compose") } } ) }
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy język JavaScript jest wyłączony.
- Semantyka w Compose
- Ułatwienia dostępu w Compose
- Material Design 2 w Compose