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