Text ist das Herzstück von sozialen Anwendungen. Hier können Nutzende Gedanken teilen, Emotionen zu kommunizieren und Geschichten zu erzählen. In diesem Dokument wird erläutert, wie Sie mit Text und sich dabei auf Emojis, Stile und die Integration von Rich Content konzentrieren.
Mit Emojis arbeiten
Emojis sind zu einem wichtigen Bestandteil der modernen Kommunikation geworden, insbesondere Social-Media- und Messaging-Apps. Sie überwinden Sprachbarrieren und ermöglichen es Nutzern, Emotionen und Ideen schnell und effektiv auszudrücken.
Emoji-Unterstützung in „Compose“
Jetpack Compose, das moderne Toolkit für deklarative Benutzeroberflächen von Android, vereinfacht Emojis Umgang mit:
- Eingabe: Die Komponente
TextFieldunterstützt nativ die Emoji-Eingabe. - Anzeige: Die
Text-Komponente von Compose rendert Emojis korrekt und sorgt so für eine einheitliche Darstellung auf Geräten und Plattformen, die einen Emoji2-kompatiblen Anbieter für herunterladbare Schriftarten anbieten, z. B. Geräte mit Google Play-Diensten.
Unter Emojis anzeigen wird beschrieben, wie Emojis in Jetpack Compose angezeigt werden und wie sicherstellen, dass Ihre App die neuesten Emoji-Schriftarten anzeigt, wie Sie sicherstellen, dass Emojis funktionieren, wenn Ihre App Aufrufe und Schreiben in derselben Aktivität, und wie Sie Probleme beheben, wenn Emojis nicht wie erwartet angezeigt werden.
Emoji-Unterstützung in Views
Wenn Sie Android Views verwenden, bietet die AppCompat-Bibliothek 1.4 oder höher
Emoji-Unterstützung für abgeleitete Plattformklassen von TextView:
- Eingabe: Die AppCompat-Version von
EditTextunterstützt nativ Emojis Eingabe. - Anzeige: Die AppCompat-Versionen von
TextView,ToggleButton,Switch,Button,CheckedTextView,RadioButton,CheckBox,AutoCompleteTextViewundMultiAutoCompleteTextViewunterstützen die Anzeige von Emojis. So wird auf Geräten und Plattformen mit einem Emoji2-kompatiblen Anbieter für herunterladbare Schriftarten ein einheitliches Erscheinungsbild sichergestellt, z. B. auf Geräten mit Google Play-Diensten.
Wenn Sie eine benutzerdefinierte Ansicht erstellen, die eine direkte oder indirekte Unterklasse von TextView ist, erweitern Sie die AppCompat-Implementierung (nicht die Plattformimplementierung), um die integrierte Emoji-Unterstützung zu erhalten. Im Hilfeartikel Moderne Emojis unterstützen erfahren Sie unter anderem, wie Sie die Emoji-Integration testen und Fehler beheben, Emojis ohne AppCompat unterstützen, Emojis in benutzerdefinierten Ansichten unterstützen und alternative Schriftarten oder Schriftartenanbieter unterstützen.
Emoji-Auswahl verwenden
Die Jetpack Emoji-Auswahl ist eine Android-Ansicht mit einer kategorisierten Liste von Emojis, anhaftenden Varianten und Unterstützung für kürzlich verwendete Emojis. Sie ist mit mehreren Android-Versionen und -Geräten kompatibel. So können Sie die Emoji-Integration Ihrer App ganz einfach optimieren.
Importieren Sie zuerst die Bibliothek in build.gradle.
dependencies {
implementation("androidx.emoji2:emojipicker:$version")
}
Emoji-Auswahl mit „Schreiben“ verwenden
Sie können die Emoji-Auswahl in „Compose“ mit dem AndroidView erstellen
zusammensetzbar sind. Dieses Snippet enthält einen Listener, der Sie darüber informiert,
ist ausgewählt:
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = { context ->
val emojiPickerView = EmojiPickerView(context)
emojiPickerView.setOnEmojiPickedListener(this::updateTextField)
emojiPickerView
},
)
Compose 1.7 bietet viele neue Funktionen in BasicTextField, darunter:
Unterstützung für TextFieldState, die in Ihrem ViewModel enthalten sein kann:
private val emojiTextFieldState = TextFieldState()
@Composable fun EmojiTextField() {
BasicTextField(
state = emojiTextFieldState,
)
}
Mit TextFieldState können Sie Text an der Cursorposition einfügen oder den ausgewählten Text ersetzen, als würden Sie ihn in die IME eingeben:
private fun insertStringAsIfTyping(textFieldState: TextFieldState, string: String) {
textFieldState.edit {
replace(selection.start, selection.end, string)
// clear selection on replace if necessary
if (hasSelection) selection = TextRange(selection.end)
}
}
Der Callback kann den BasicTextField mithilfe der Hilfsfunktion aktualisieren:
private fun updateTextField(emojiViewItem: EmojiViewItem) {
insertStringAsIfTyping(emojiTextFieldState, emojiViewItem.emoji)
}
Emoji-Auswahl in Ansichten verwenden
Die Emoji-Auswahl funktioniert auch gut mit Aufrufen.
Maximieren Sie EmojiPickerView. Optional können Sie „EmojiGridColumns“ und EmojisGridRows basierend auf der gewünschten Größe der einzelnen Emoji-Zellen.
<androidx.emoji2.emojipicker.EmojiPickerView
…
app:emojiGridColumns="9" />
Fügen Sie an der Cursorposition ein Zeichen ein oder ersetzen Sie den ausgewählten Text:
// Consider unregistering/reregistering anyTextWatcher that you might have as part of this
private fun insertStringAsIfTyping(editText: EditText, string: String) {
val stringBuffer = StringBuffer(editText.text.toString())
val index = editText.selectionStart
if ( !editText.hasSelection() ) {
stringBuffer.insert(index, string)
} else {
stringBuffer.replace(index, editText.selectionEnd, string)
}
editText.setText(stringBuffer.toString())
editText.setSelection(index + string.length)
}
Stellen Sie einen Listener für das ausgewählte Emoji bereit und fügen Sie damit Zeichen an
EditText.
// a listener example
emojiPickerView.setOnEmojiPickedListener {
val editText = findViewById<EditText>(R.id.edit_text)
insertStringAsIfTyping(editText, it.emoji)
}
Text gestalten
Durch visuelle Unterscheidungen wie Schriftarten, -größen, -stärken und -farben können Sie die Lesbarkeit, Hierarchie und allgemeine Ästhetik der Benutzeroberfläche Ihrer Social-Media- oder Messaging-App verbessern. Mithilfe von Textstilen können Nutzer Informationen schnell analysieren, zwischen verschiedenen Arten von Nachrichten unterscheiden und wichtige Elemente erkennen.
Text in „Schreiben“ formatieren
Das Text-Element bietet zahlreiche Stiloptionen, darunter:
- Schriftfarbe: Legen Sie
Colorfest, um den Text hervorzuheben. - Schriftgröße: Mit
FontSizekönnen Sie die gewünschte Größe einstellen. - Schriftstil: Mit
FontStylewird Text kursiv dargestellt. - Schriftstärke: Sie können
FontWeightfür fette, helle usw. Textvariationen anpassen. - Schriftfamilie: Wählen Sie mit
FontFamilyeine geeignete Schriftart aus.
Text(
text = "Hello 👋",
color = Color.Blue
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
fontFamily = FontFamily.SansSerif
)
Mithilfe von Designs können Sie diese Stiloptionen einheitlich für Ihre Anwendung festlegen.
MaterialTheme(
// This theme would include Color.Blue (as appropriate for dark and light themes)
colorScheme = colorScheme,
content = content,
typography = Typography(
titleLarge = TextStyle(
fontSize = 18.sp,
fontFamily = titleFont,
fontWeight = FontWeight.Bold
),
),
)
Mehrere Stile in Text einfügen
Sie können innerhalb derselben zusammensetzbaren Text-Funktion verschiedene Stile festlegen. Verwenden Sie dazu
AnnotatedString
AnnotatedString hat einen typsicheren Builder, buildAnnotatedString, der die Erstellung vereinfacht.
@Composable
fun MultipleStylesInText() {
Text(
buildAnnotatedString {
withStyle(style = SpanStyle(color = Color.Blue)) {
append("M")
}
append("y ")
withStyle(style = SpanStyle(fontWeight = FontWeight.Bold, color = Color.Red)) {
append("S")
}
append("tyle")
}
)
}
Weitere Informationen zu den Textstilen in „Schreiben“ finden Sie unter Text gestalten. z. B. Schatten hinzufügen, erweiterte Stile mit einem Pinsel und Deckkraft:
Text in Ansichten gestalten
Verwenden Sie bei Datenansichten Stile und Designs für eine einheitliche Typografie. Weitere Informationen finden Sie unter Unter Stile und Designs finden Sie weitere Informationen dazu, wie Sie benutzerdefinierte Designs auf die Anzahl der Aufrufe in Ihrer App. Wenn Sie innerhalb eines Textes verschiedene Stile festlegen möchten Hier finden Sie Informationen zum Ändern von Text in verschiedenen Spans. indem sie beispielsweise Farbe hinzufügen, den Text anklickbar machen, die Textgröße anpassen und Text anpassen.
Bildtastaturen und andere Rich Media-Inhalte unterstützen
Nutzer möchten oft mit Stickern, Animationen und anderen Arten von interaktiven Inhalten kommunizieren. Damit Apps Rich-Inhalte einfacher empfangen können, wurde in Android 12 (API-Level 31) eine einheitliche API eingeführt, mit der Ihre App Inhalte aus beliebigen Quellen akzeptieren kann: Zwischenablage, Tastatur oder Drag-and-drop. Für rückwärts Kompatibilität mit früheren Android-Versionen (derzeit ab API-Level 14) empfehlen wir die Verwendung von Android Jetpack (AndroidX) dieser API.
Sie hängen ein OnReceiveContentListener an UI-Komponenten an und erhalten ein
Callback verwendet, wenn Inhalte über einen beliebigen Mechanismus eingefügt werden. Der Rückruf ist der einzige Ort, an dem Ihr Code den Empfang aller Inhalte verarbeiten kann, von einfachem und formatiertem Text über Markup, Bilder, Videos, Audiodateien und mehr.
Weitere Informationen zur Implementierung der Unterstützung in
für Ihre App. Jetpack Compose enthält jetzt dragAndDropSource und
dragAndDropTarget-Modifikatoren, um die Implementierung von Drag-and-drop zu vereinfachen
in deiner App und zwischen anderen Apps.