Frage

Ich teile ein spannable Objekt in 3 Teile, machen verschiedene Operationen, und dann muss ich sie zusammenführen.

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);            

Wie kann ich es tun? Ich habe nicht gefunden, die gewünschte Methode oder Konstruktor, es zu tun.

War es hilfreich?

Andere Tipps

Danke, es funktioniert. Ich habe bemerkt, dass ich sogar 3 spannable Objekt zusammenführen kann:

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

Ich weiß, das alt ist. Aber nach dem Modifizieren Kotlin stdlib ein bisschen ich diesen Code haben:

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) }
}

Hoffnung, es könnte jemand helfen.

Wie gesagt marwinXXII in einem Kommentar, mit TextUtils.concat funktionierts aber kann den Verlust von Arten in einigen Fällen verursachen, wenn Sie mehrere Instanzen der gleichen Spanne in einem einzigen CharSequence haben.

konnte Eine Abhilfe, die CharSequence zu einem Parcel zu schreiben und es dann wieder lesen. Beispiel Kotlin Erweiterung Code tun dies unter:

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
}

Beispiel für die Verwendung dieses Codes:

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

Jetzt können Sie Tonnen CharSequences verketten, ohne sich Gedanken über eine der Arten zu verlieren und Formatierungen, die Sie auf sie haben!

Beachten Sie, dass dies für funktioniert die meisten Stile, ist es nicht die ganze Zeit arbeiten, aber sollte genug sein, um alle grundlegenden Stile zu decken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top