73 votes

Comment fusionner des objets extensibles ?

Je divise un objet extensible en 3 parties, fais différentes opérations, puis 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 le faire? Je n'ai pas trouvé la méthode ou le constructeur requis pour le faire.

171voto

xil3 Points 7220

22voto

Eugene Points 941

Merci, ça marche. J'ai remarqué que je peux fusionner même 3 objets extensibles :

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

7voto

AlexKost Points 527

Je sais que c'est vieux. Mais après avoir modifié un peu kotlin stdlib, 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) }
}

J'espère que ça pourra aider quelqu'un.

4voto

Mardann Points 308

Utilisez SpannableStringBuilder .

Mieux encore, créez une surcharge d'opérateur kotlin :

 operator fun Spannable.plus(other: Spannable): Spannable{
    return SpannableStringBuilder(this).append(other)
}

jetez-le simplement dans n'importe quel fichier kotlin en tant que fonction de niveau supérieur.

et vous pouvez concaténer en utilisant + :

 val spanA = ...
val spanB = ...

val concatenatedSpan = spanA + spanB

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X