Programing

Android Spanned, SpannedString, Spannable, SpannableString 및 CharSequence

lottogame 2020. 9. 18. 19:13
반응형

Android Spanned, SpannedString, Spannable, SpannableString 및 CharSequence


안드로이드 이벤트 모든 텍스트 문자열에 관련된 다양한 인터페이스 : Spanned, SpannedString, Spannable, SpannableStringCharSequence.

나는 다양한 시나리오에 위의 모든 사용하고 일반적으로 사용 후 Html.fromHtml(), 안쪽 링크 가능한 텍스트를 표시하는 데 TextView여기에 몇 가지 스타일을 적용하기 위해.

나는 안드로이드의 공식 문서에서 이러한 인터페이스의 목적 / 사용을 이해하려고 노력했지만 상당히 혼란스러워서 실패했습니다. 이러한 인터페이스의 목적은 무엇입니까? 어떤 시나리오에서 그것들을 사용하는 것이 가장 일반적입니까? 어떤 경우에 사용하지 않는 것이 가장 좋습니까? 그중 하나를 사용할 때 고려해야 할 명백한 성능 영향이 있습니까?

누군가 괜찮은 설명을 할 수 있다면 대단히 감사하겠습니다.


이 인터페이스의 목적은 무엇입니까?

yuml.me/edit/5f8da6cb의 다이어그램 CharSequence일련의 문자를 나타내는 표준 Java 인터페이스입니다. String가장 일반적으로 사용되는 콘크리트 구현 한 CharSequence다음, StringBuilder.

SpannedCharSequence텍스트의 일부에 적용 할 서식을 나타내는 "범위" 가있는 입니다. 이러한 범위는 수정할 수 없습니다.

SpannableSpanned범위를 수정하는 기능 (서식을 추가하거나 제거하기 위해)을 추가하지만 텍스트 자체를 수정 하지는 않습니다 .

SpannedStringSpanned인터페이스 의 구체적인 구현입니다 .

SpannableStringSpannable인터페이스 의 구체적인 구현입니다 .

어떤 시나리오에서 그것들을 사용하는 것이 가장 일반적입니까?

방법이있을 때 반환 하나 (예를 들어, getText()EditText) 또는 (예를 들어 파라미터로서 하나를 취하는 방법이있는 경우 setText()(A)에 TextView).yuml.me/edit/35c8f39f의 다이어그램

사용하여 귀하의 인용 경우는 Html.fromHtml()A와, 아마도 기존의 안드로이드 개발에서 가장 일반적인 TextViewA를가 Spanned보다 무게가 훨씬 가볍고입니다 WebView. 그러나 다음과 같은 다른 사용 사례가 있습니다.

어떤 경우에 사용하지 않는 것이 가장 좋습니까?

그들은 대머리, 제설, 열 펌프 수리, 수플레 만들기 등을 방지하는 데 유일하게 끔찍합니다.

:-)

그중 하나를 사용할 때 고려해야 할 명백한 성능 영향이 있습니까?

인터페이스는 정의에 따라 "성능에 영향을 미치지 않습니다". 이는 단지 API에 대한 설명 일뿐입니다.

특정 작업에서 SpannableString보다 훨씬 느리다는 것을 알지 못합니다 SpannedString. 그러나, SpannableStringBuilder웰보다 약간 느릴 수있다 (텍스트 포맷 것을 그 스팬에 추가 텍스트를 조작 가능하게하는) SpannableString또는 SpannedString다양한 것들을. 그러나 성능 차이가 중요한지 여부는 사용량에 따라 다릅니다.


A String는 변경할 수 없습니다 (즉, 텍스트를 변경할 수 없음). 또한 연관된 ​​스팬이 없습니다. (범위는 색상, 강조 표시, 기울임 꼴, 링크 등과 같은 스타일 정보를 포함하는 텍스트 범위입니다.) 따라서 String텍스트를 변경할 필요가없고 스타일을 지정할 필요가 없을 때 a를 사용할 수 있습니다 .

StringBuilder

A StringBuilder에는 변경 가능한 텍스트가 있으므로 새 개체를 만들지 않고도 수정할 수 있습니다. 그러나 스팬 정보가 없습니다. 일반 텍스트입니다. 따라서 StringBuilder텍스트를 변경해야하지만 스타일 지정에 신경 쓰지 않는 경우를 사용하십시오.

SpannedString

A SpannedString에는 변경 불가능한 텍스트 (예 : a String) 및 변경 불가능한 범위 정보가 있습니다. Spanned인터페이스에서 정의한 요구 사항의 구체적인 구현입니다 . 를 사용하여 SpannedString텍스트 스타일을 가지고 있지만 당신이 그것을 만든 후 텍스트 나 스타일 중 하나를 변경할 필요가 없습니다 때.

참고 :SpannedStringBuilder 텍스트가 변경되면 범위 정보도 변경되어야하기 때문에 a와 같은 것은 없습니다 .

SpannableString

A SpannableString has immutable text, but its span information is mutable. It is a concrete implementation of the requirements defined by the Spannable interface. Use a SpannableString when your text doesn't need to be changed but the styling does.

SpannableStringBuilder

A SpannableStringBuilder has both mutable text and span information. It is a concrete implementation of the requirements defined by the Spannable and Editable interfaces (among others). Use a SpannableStringBuilder when you will need to update the text and its style.

CharSequence

A CharSequence는 구체적인 클래스가 아닌 인터페이스입니다. 즉,이를 구현하는 모든 클래스에 대해 따라야 할 규칙 목록을 정의합니다. 그리고 위에서 언급 한 모든 클래스가이를 구현합니다. 따라서 CharSequence최대한의 유연성을 위해 가지고있는 객체 유형을 일반화하려는 경우를 사용할 수 있습니다 . 필요할 경우 언제든지 String또는 SpannableStringBuilder또는 나중에 무엇이든 다운 캐스트 할 수 있습니다 .

참고 URL : https://stackoverflow.com/questions/17546955/android-spanned-spannedstring-spannable-spannablestring-and-charsequence

반응형