Как объединить несколько охватываемых объектов? - PullRequest
55 голосов
/ 05 января 2011

Я делю объект на три части, выполняю различные операции, а затем мне нужно объединить их.Я не нашел требуемый метод или конструктор, чтобы сделать это.

Ответы [ 4 ]

138 голосов
/ 05 января 2011

Вы можете использовать это:

TextUtils.concat(span1, span2);

http://developer.android.com/reference/android/text/TextUtils.html#concat(java.lang.CharSequence...)

19 голосов
/ 05 января 2011

Спасибо, все работает.Я заметил, что могу объединить даже 3 охватываемых объекта:

(Spanned) TextUtils.concat(foo, bar, baz)
1 голос
/ 03 ноября 2017

Я знаю, что это старый.Но после небольшого изменения kotlin stdlib я получил такой код:

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

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 03 марта 2018

Как сказано в комментарии marwinXXII, использование TextUtils.concat работает, но может привести к потере стилей в некоторых случаях, когда в одном CharSequence.

несколько экземпляров одного и того же диапазона.

Обходной путь может быть записать CharSequence в Parcel и затем прочитать его обратно. Пример кода расширения Kotlin для этого ниже:

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
}

Пример использования этого кода:

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

Теперь вы можете объединять тонны CharSequences, не беспокоясь о потере любого из стилей и форматирования, которые у вас есть!

Обратите внимание, что это будет работать для большинства стилей, оно работает не всегда, но должно быть достаточно для охвата всех основных стилей.

...