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") } } }
Получить позицию щелчка по тексту
Чтобы прослушивать клики по Text
, вы можете добавить модификатор clickable
. Однако, если вы хотите получить позицию щелчка внутри составного Text
, в случае, когда у вас есть разные действия, основанные на разных частях текста, вам нужно вместо этого использовать ClickableText
:
@Composable fun SimpleClickableText() { ClickableText(text = AnnotatedString("Click Me"), onClick = { offset -> Log.d("ClickableText", "$offset -th character is clicked.") }) }
Нажмите с аннотацией
Когда пользователь нажимает на составной элемент Text
, вы можете захотеть прикрепить дополнительную информацию к части значения Text
, например, URL-адрес, прикрепленный к определенному слову, которое нужно открыть в браузере. Для этого вам необходимо прикрепить аннотацию, которая принимает в качестве параметров тег ( String
), элемент ( String
) и текстовый диапазон. Из AnnotatedString
эти аннотации можно фильтровать по их тегам или текстовым диапазонам. Вот пример:
@Composable fun AnnotatedClickableText() { val annotatedText = buildAnnotatedString { append("Click ") // We attach this *URL* annotation to the following content // until `pop()` is called pushStringAnnotation( tag = "URL", annotation = "https://developer.android.com" ) withStyle( style = SpanStyle( color = Color.Blue, fontWeight = FontWeight.Bold ) ) { append("here") } pop() } ClickableText(text = annotatedText, onClick = { offset -> // We check if there is an *URL* annotation attached to the text // at the clicked position annotatedText.getStringAnnotations( tag = "URL", start = offset, end = offset ).firstOrNull()?.let { annotation -> // If yes, we log its value Log.d("Clicked URL", annotation.item) } }) }{% дословно %}
Рекомендуется для вас
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Семантика в Compose
- Доступность в Compose
- Material Design 2 в Compose