Il testo è al centro delle applicazioni social, in cui gli utenti condividono pensieri, esprimono emozioni e raccontano storie. Questo documento spiega come utilizzare il testo in modo efficace, concentrandosi su emoji, stile e integrazione di contenuti avanzati.
Utilizzare le emoji
Le emoji sono diventate parte integrante della comunicazione moderna, in particolare le app social e di messaggistica. Superano le barriere linguistiche, consentendo agli utenti di esprimere emozioni e idee in modo rapido ed efficace.
Supporto delle emoji in Compose
Jetpack Compose, il moderno toolkit per l'interfaccia utente dichiarativa di Android, semplifica il trattamento delle emoji:
- Input: il componente
TextFieldsupporta in modo nativo l'inserimento di emoji. - Visualizzazione: il componente
Textdi Compose esegue il rendering delle emoji correttamente, garantendone l'aspetto coerente su dispositivi e piattaforme che offrono un fornitore di caratteri scaricabili compatibile con emoji2, ad esempio i dispositivi con Google Play Services.
Mostrare emoji illustra la visualizzazione delle emoji in Jetpack Compose, inclusa la procedura per assicurarti che la tua app mostri i caratteri emoji più recenti, come fare in modo che le emoji funzionino correttamente se la tua app utilizza sia le visualizzazioni sia Compose nella stessa attività e come risolvere i problemi quando le emoji non vengono visualizzate come previsto.
Supporto delle emoji nelle Visualizzazioni
Se utilizzi Android View, la raccolta AppCompat 1.4 o versioni successive fornisce
supporto di emoji per le sottoclassi della piattaforma TextView:
- Input: la versione AppCompat di
EditTextsupporta le emoji in modo nativo di testo. - Visualizzazione: le versioni AppCompat di
TextView,ToggleButton,Switch,Button,CheckedTextView,RadioButton,CheckBox,AutoCompleteTextVieweMultiAutoCompleteTextViewsupportano tutte la visualizzazione delle emoji, garantendo un aspetto coerente su dispositivi e piattaforme che forniscono un fornitore di caratteri scaricabili compatibile con emoji2, come i dispositivi basati su Google Play Services.
Se stai creando una vista personalizzata che è una sottoclasse diretta o indiretta
di TextView, estendi l'implementazione di AppCompat (anziché la piattaforma
implementazione) per ottenere il supporto integrato delle emoji. La pagina Supporta le emoji moderne mostra come testare e risolvere i problemi di integrazione delle emoji, supportare le emoji senza AppCompat, supportare le emoji nelle visualizzazioni personalizzate, supportare caratteri o fornitori di caratteri alternativi e altro ancora.
Uso del selettore di emoji
Jetpack Emoji Picker è una View Android che fornisce un elenco classificato di emoji, varianti fisse e supporto per le emoji usate di recente, compatibile con più versioni e dispositivi Android. È un modo semplice per migliorare l'integrazione delle emoji nella tua app.
Inizia importando la libreria in build.gradle.
dependencies {
implementation("androidx.emoji2:emojipicker:$version")
}
Utilizzare il selettore di emoji con Scrivi
Costruisci il selettore di emoji in Compose utilizzando il composable AndroidView. Questo snippet include un listener che ti informa quando un'emoji
è selezionata:
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = { context ->
val emojiPickerView = EmojiPickerView(context)
emojiPickerView.setOnEmojiPickedListener(this::updateTextField)
emojiPickerView
},
)
Compose 1.7 aggiunge molte nuove funzionalità a BasicTextField, tra cui
supporto per TextFieldState, che può trovarsi nel tuo ViewModel:
private val emojiTextFieldState = TextFieldState()
@Composable fun EmojiTextField() {
BasicTextField(
state = emojiTextFieldState,
)
}
Puoi utilizzare TextFieldState per inserire testo nella posizione del cursore oppure
sostituisci il testo selezionato, come se stessi digitando nell'IME:
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)
}
}
Il callback può aggiornare BasicTextField utilizzando la funzione di supporto:
private fun updateTextField(emojiViewItem: EmojiViewItem) {
insertStringAsIfTyping(emojiTextFieldState, emojiViewItem.emoji)
}
Utilizzare il selettore di emoji con le visualizzazioni
Il selettore di emoji funziona bene anche con le visualizzazioni.
Carica EmojiPickerView. Se vuoi, imposta emojiGridColumns e emojiGridRows in base alle dimensioni desiderate di ogni cella emoji.
<androidx.emoji2.emojipicker.EmojiPickerView
…
app:emojiGridColumns="9" />
Inserisci un carattere nella posizione del cursore o sostituisci il testo selezionato:
// 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)
}
Fornisci a un ascoltatore l'emoji selezionata e utilizzala per aggiungere caratteri a
EditText.
// a listener example
emojiPickerView.setOnEmojiPickedListener {
val editText = findViewById<EditText>(R.id.edit_text)
insertStringAsIfTyping(editText, it.emoji)
}
Applica stile al testo
Applicando distinzioni visive al testo, come stili, dimensioni, spessori e colori dei caratteri, puoi migliorare la leggibilità, la gerarchia e l'estetica complessiva dell'interfaccia utente della tua app di social o messaggistica. Gli stili di testo aiutano gli utenti a analizzare rapidamente le informazioni, a distinguere tra diversi tipi di messaggi e a identificare gli elementi importanti.
Definisci lo stile del testo in Compose
Il composable Text offre una vasta gamma di opzioni di stile, tra cui:
- Colore del testo: imposta
Colorper mettere in risalto il testo. - Dimensioni carattere: controlla
FontSizeper la scala appropriata. - Stile carattere: utilizza
FontStyleper formattare il testo in corsivo. - Spessore carattere: regola
FontWeightin base a variazioni di testo in grassetto, chiaro e così via. - Famiglia di caratteri: usa
FontFamilyper scegliere un carattere adatto.
Text(
text = "Hello 👋",
color = Color.Blue
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
fontFamily = FontFamily.SansSerif
)
Puoi impostare queste opzioni di stile in modo coerente nell'applicazione utilizzando: temi.
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
),
),
)
Aggiungere più stili al testo
Puoi impostare stili diversi all'interno dello stesso componibile Text utilizzando un
AnnotatedString
AnnotatedString dispone di uno generatore di annunci sicuri per il tipo,
buildAnnotatedString, per semplificare la creazione.
@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")
}
)
}
Consulta Stile del testo per molte altre informazioni sugli stili del testo in Compose. tra cui l'aggiunta di un'ombra, gli stili avanzati con un pennello e opacità.
Applicare uno stile al testo nelle visualizzazioni
Con le visualizzazioni, puoi utilizzare stili e temi per una tipografia coerente. Consulta Stili e temi per saperne di più su come applicare temi personalizzati alle visualizzazioni della tua app. Se vuoi impostare stili diversi in un'unica visualizzazione di testo, consulta Spazi per saperne di più su come modificare il testo in vari modi, ad esempio aggiungendo un colore, rendendo il testo cliccabile, modificando le dimensioni del testo e disegnando il testo in modo personalizzato.
Supporta tastiere immagine e altri contenuti avanzati
Gli utenti spesso vogliono comunicare utilizzando adesivi, animazioni e altri tipi di contenuti avanzati. Per semplificare la ricezione di contenuti avanzati per le app, Android 12 (livello API 31) ha introdotto un'API unificata che consente alla tua app di accettare contenuti da qualsiasi fonte: appunti, tastiera o trascinamento. Per retro compatibilità con le versioni precedenti di Android (attualmente tornano al livello API 14), ti consigliamo di utilizzare la versione Android Jetpack (AndroidX) di questa API.
Colleghi una OnReceiveContentListener ai componenti dell'interfaccia utente e ricevi un
quando il contenuto viene inserito tramite un qualsiasi meccanismo. Il callback diventa
il punto in cui il codice gestisce la ricezione di tutti i contenuti, da quelli semplici
testo con stili applicati a markup, immagini, video, file audio e altro ancora.
Consulta Ricevere contenuti avanzati per scoprire di più su come implementare il supporto nella tua app. Jetpack Compose ora dispone dei modificatori dragAndDropSource e
dragAndDropTarget per semplificare l'implementazione del trascinamento
all'interno della tua app e tra altre app.