Android Spanned, SpannedString, Spannable, SpannableString 및 CharSequence
안드로이드 이벤트 모든 텍스트 문자열에 관련된 다양한 인터페이스 : Spanned
, SpannedString
, Spannable
, SpannableString
와 CharSequence
.
나는 다양한 시나리오에 위의 모든 사용하고 일반적으로 사용 후 Html.fromHtml()
, 안쪽 링크 가능한 텍스트를 표시하는 데 TextView
여기에 몇 가지 스타일을 적용하기 위해.
나는 안드로이드의 공식 문서에서 이러한 인터페이스의 목적 / 사용을 이해하려고 노력했지만 상당히 혼란스러워서 실패했습니다. 이러한 인터페이스의 목적은 무엇입니까? 어떤 시나리오에서 그것들을 사용하는 것이 가장 일반적입니까? 어떤 경우에 사용하지 않는 것이 가장 좋습니까? 그중 하나를 사용할 때 고려해야 할 명백한 성능 영향이 있습니까?
누군가 괜찮은 설명을 할 수 있다면 대단히 감사하겠습니다.
이 인터페이스의 목적은 무엇입니까?
CharSequence
일련의 문자를 나타내는 표준 Java 인터페이스입니다. String
가장 일반적으로 사용되는 콘크리트 구현 한 CharSequence
다음, StringBuilder
.
Spanned
는 CharSequence
텍스트의 일부에 적용 할 서식을 나타내는 "범위" 가있는 입니다. 이러한 범위는 수정할 수 없습니다.
Spannable
은 Spanned
범위를 수정하는 기능 (서식을 추가하거나 제거하기 위해)을 추가하지만 텍스트 자체를 수정 하지는 않습니다 .
SpannedString
Spanned
인터페이스 의 구체적인 구현입니다 .
SpannableString
Spannable
인터페이스 의 구체적인 구현입니다 .
어떤 시나리오에서 그것들을 사용하는 것이 가장 일반적입니까?
방법이있을 때 반환 하나 (예를 들어, getText()
온 EditText
) 또는 (예를 들어 파라미터로서 하나를 취하는 방법이있는 경우 setText()
(A)에 TextView
).
사용하여 귀하의 인용 경우는 Html.fromHtml()
A와, 아마도 기존의 안드로이드 개발에서 가장 일반적인 TextView
A를가 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
또는 나중에 무엇이든 다운 캐스트 할 수 있습니다 .
'Programing' 카테고리의 다른 글
(n & -n) == n이면 n이 2의 거듭 제곱 인 이유는 무엇입니까? (0) | 2020.09.18 |
---|---|
bash에서 기능 키를 명령에 어떻게 바인딩합니까? (0) | 2020.09.18 |
SpanSizeLookup을 사용하여 GridLayoutManager의 항목에 대한 범위 설정 (0) | 2020.09.18 |
gcloud와 minikube간에 kubectl 클러스터를 전환하는 방법 (0) | 2020.09.18 |
WWW 여부 WWW, 기본 사이트 이름으로 무엇을 선택해야합니까? (0) | 2020.09.18 |