Question

Je divise un objet spannable en 3 parties, effectuer des opérations différentes, et je dois les fusionner.

Spannable str = editText.getText();
Spannable selectionSpannable = new SpannableStringBuilder(str, selectionStart, selectionEnd);
Spannable endOfModifiedSpannable = new SpannableStringBuilder(str, selectionEnd, editText.getText().length());
Spannable beginningOfModifiedSpannable = new SpannableStringBuilder(str, 0, selectionStart);            

Comment puis-je faire? Je ne l'ai pas trouvé la méthode requise ou le constructeur pour le faire.

Était-ce utile?

La solution

Autres conseils

Merci, cela fonctionne. Je l'ai remarqué que je peux fusionner même 3 objet spannable:

(Spanned) TextUtils.concat(foo, bar, baz)

Je sais que c'est vieux. Mais après avoir modifié Kotlin stdlib un peu j'ai ce code:

fun <T> Iterable<T>.joinToSpannedString(separator: CharSequence = ", ", prefix: CharSequence = "", postfix: CharSequence = "", limit: Int = -1, truncated: CharSequence = "...", transform: ((T) -> CharSequence)? = null): SpannedString {
    return joinTo(SpannableStringBuilder(), separator, prefix, postfix, limit, truncated, transform)
            .let { SpannedString(it) }
}

Espérons que cela pourrait aider quelqu'un.

Comme marwinXXII dit dans un commentaire, en utilisant TextUtils.concat fonctionne, mais peut entraîner une perte de styles dans certains cas, lorsque vous avez plusieurs instances de la même période en une seule CharSequence.

Une solution pourrait consister à écrire le CharSequence à un Parcel puis relit. Exemple Kotlin code d'extension pour ce faire ci-dessous:

fun CharSequence.cloneWithSpans(): CharSequence {
    val parcel = Parcel.obtain()
    TextUtils.writeToParcel(this, parcel, 0)
    parcel.setDataPosition(0)
    val out = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel)
    parcel.recycle()
    return out
}

Exemple d'utilisation de ce code:

TextUtils.concat(*yourListOfText.map { it.cloneWithSpans() }.toTypedArray())

Maintenant, vous pouvez concaténer tonnes de CharSequences sans se soucier de perdre des styles et le formatage que vous avez sur eux!

Notez que cela fonctionne pour plus styles, il ne fonctionne pas tout le temps, mais devrait être suffisant pour couvrir tous les styles de base.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top