Jetpack Compose ermöglicht eine fein abgestimmte Interaktivität in Text
. Die Textauswahl ist jetzt flexibler und kann in zusammensetzbaren Layouts erfolgen. Nutzerinteraktionen im Text unterscheiden sich von anderen zusammensetzbaren Layouts, da Sie einem Teil einer zusammensetzbaren Funktion Text
keinen Modifikator hinzufügen können. Auf dieser Seite werden die APIs vorgestellt, die Nutzerinteraktionen ermöglichen.
Text auswählen
Standardmäßig sind zusammensetzbare Funktionen nicht auswählbar. Das bedeutet, dass Nutzer weder Text auswählen noch aus Ihrer App kopieren können. Um die Textauswahl zu aktivieren, umbrechen Sie Ihre Textelemente mit einer zusammensetzbaren Funktion SelectionContainer
:
@Composable fun SelectableText() { SelectionContainer { Text("This text is selectable") } }
Sie können die Auswahl bestimmter Teile eines auswählbaren Bereichs deaktivieren. Dazu müssen Sie den nicht auswählbaren Teil mit einer zusammensetzbaren Funktion DisableSelection
umschließen:
@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") } } }
Position von Klicks auf Text abrufen
Fügen Sie den Modifizierer clickable
hinzu, um Klicks auf Text
zu erfassen. Wenn Sie jedoch die Position eines Klicks innerhalb einer zusammensetzbaren Funktion Text
abrufen möchten und verschiedene Aktionen basierend auf verschiedenen Teilen des Textes ausführen, müssen Sie stattdessen ClickableText
verwenden:
@Composable fun SimpleClickableText() { ClickableText(text = AnnotatedString("Click Me"), onClick = { offset -> Log.d("ClickableText", "$offset -th character is clicked.") }) }
Klick mit Anmerkung
Wenn ein Nutzer auf eine zusammensetzbare Funktion Text
klickt, möchten Sie möglicherweise zusätzliche Informationen an einen Teil des Werts Text
anhängen, z. B. eine URL, die mit einem bestimmten Wort verknüpft ist und in einem Browser geöffnet werden soll. Dazu müssen Sie eine Annotation anhängen, die ein Tag (String
), ein Element (String
) und einen Textbereich als Parameter verwendet. Diese Annotationen aus einem AnnotatedString
können anhand ihrer Tags oder Textbereiche gefiltert werden. Hier ist ein Beispiel:
@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) } }) }
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Semantik in Compose
- Bedienungshilfen in der Funktion „Compose“
- Material Design 2 in Compose