Как сказано в комментарии 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
, не беспокоясь о потере любого из стилей и форматирования, которые у вас есть!
Обратите внимание, что это будет работать для большинства стилей, оно работает не всегда, но должно быть достаточно для охвата всех основных стилей.