반응형
확장 가능한 개체를 병합하는 방법은 무엇입니까?
스패닝 가능한 객체를 세 부분으로 나누고 다른 작업을 수행 한 다음 병합해야합니다.
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);
내가 어떻게 해? 필요한 메서드 나 생성자를 찾지 못했습니다.
이것을 사용할 수 있습니다.
TextUtils.concat(span1, span2);
감사합니다. 3 개의 스패닝 가능한 객체도 병합 할 수 있습니다.
(Spanned) TextUtils.concat(foo, bar, baz)
나는 이것이 오래된 것을 압니다. 하지만 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) }
}
누군가를 도울 수 있기를 바랍니다.
marwinXXII가 주석에서 말했듯이 사용 TextUtils.concat
은 작동하지만 단일 .NET 에 동일한 범위의 여러 인스턴스가있는 경우 일부 경우 스타일이 손실 될 수 있습니다 CharSequence
.
해결 방법은을 쓸 수 CharSequence
A를 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
스타일과 서식을 잃어 버릴 염려없이 수많은 데이터를 연결할 수 있습니다!
이것은 대부분의 스타일에서 작동하지만 항상 작동하지는 않지만 모든 기본 스타일을 포함하기에 충분해야합니다.
참고 URL : https://stackoverflow.com/questions/4605588/how-to-merge-some-spannable-objects
반응형
'program tip' 카테고리의 다른 글
const int = int const? (0) | 2020.12.14 |
---|---|
Spring 구성 파일로 시스템 속성 설정 (0) | 2020.12.14 |
누군가가 최대 절전 모드에서 @MapsId를 설명해 주시겠습니까? (0) | 2020.12.13 |
디자인 패턴 : 예외 / 오류 처리 (0) | 2020.12.13 |
앵귤러 플랫폼 브라우저 란? (0) | 2020.12.13 |