Jetpack Compose обеспечивает точную интерактивность в Text. Выделение текста стало более гибким и теперь может выполняться в макетах Composable. Взаимодействие пользователя с текстом отличается от других компонуемых макетов, поскольку вы не можете добавить модификатор к части компонуемого объекта Text. На этой странице описаны API, которые позволяют пользователям взаимодействовать с картой.
Выбрать текст
По умолчанию composable-функции не поддерживают выделение, то есть пользователи не могут выделять и копировать текст из приложения. Чтобы включить выделение текста, оберните текстовые элементы в composable-функцию SelectionContainer:
@Composable fun SelectableText() { SelectionContainer { Text("This text is selectable") } }
Вы можете отключить выделение для определенных частей области, которую можно выделить. Для этого нужно обернуть невыделяемую часть в composable-функцию 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") } } }
Создавайте кликабельные разделы текста с помощью LinkAnnotation
Чтобы отслеживать клики по Text, можно добавить модификатор clickable. Однако вы можете прикрепить дополнительную информацию к определенной части значения Text, например URL к определенному слову, которое будет открываться в браузере. В таких случаях нужно использовать LinkAnnotation – аннотацию, которая представляет собой кликабельную часть текста.
С помощью LinkAnnotation вы можете прикрепить URL к части composable-функции Text, которая автоматически открывается при нажатии, как показано в следующем фрагменте:
@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(".") } ) }
Вы также можете настроить настраиваемое действие в ответ на нажатие пользователем на часть composable-функции Text. В следующем фрагменте кода, когда пользователь нажимает на Jetpack Compose, показывается ссылка. Если пользователь нажимает на нее, регистрируются показатели.
@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") } } ) }
Рекомендуем
- Примечание. Текст ссылки показывается, когда JavaScript отключен.
- Семантика в Compose
- Специальные возможности в Compose
- Material Design 2 в Compose