SpannableStringBuilder는 Text의 스타일을 지정할 때 이용하는 인터페이스 중 하나로,
주로 인터페이스의 setSpan 메소드를 활용하여 뷰의 일부 문자에만 스타일을 지정할 수 있다.
*공식 사이트 참고
https://developer.android.com/reference/android/text/SpannableStringBuilder
SpannableStringBuilder | Android Developers
android.net.wifi.hotspot2.omadm
developer.android.com
간단한 활용 예시를 보자
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.style.StyleSpan
import android.text.style.UnderlineSpan
import android.text.style.AbsoluteSizeSpan
import android.text.style.ForegroundColorSpan
class MainTextActivity : BaseTextActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setTextSpan(0, 5)
}
private fun textSpanQuizResult(int startIndex, int endIndex){
var text = String.format(resources.getString(R.string.sample_text), 10)
val spanBuilder = SpannableStringBuilder(text)
/**check point!*/
//1. COLOR
spanBuilder.setSpan(ForegroundColorSpan(Color.BLUE), startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//2. SIZE
spanBuilder.setSpan(AbsoluteSizeSpan(30, true), startIndex,endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//3. FONT
spanBuilder.setSpan(StyleSpan(Typeface.BOLD), startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_INCLUSIVE)
//4. UNDERLINE
spanBuilder.setSpan(UnderLineSpan(), startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_INCLUSIVE)
val view = findViewById<TextView>(R.id.textView)
view.text = spanBuilder
}
}
setSpan 메소드를 호출한 부분을 살펴보면 (check point 부분)
색상, 크기, 폰트, 밑줄 의 케이스로 네 번 호출하여 TextView의 스타일을 지정한 것을 확인할 수 있다.
첫번째 인자에 들어가는 값은 Custom한 클래스를 이용하여 원하는 스타일로 표현도 가능하다.
위와 같이 설정한 spanBuilder를 TextView 객체에 반영해주면 된다.
SpannableStringBuilder.java
/**
* Mark the specified range of text with the specified object.
* The flags determine how the span will behave when text is
* inserted at the start or end of the span's range.
*/
public void setSpan(Object what, int start, int end, int flags) {
setSpan(true, what, start, end, flags, true/*enforceParagraph*/);
}
인터페이스에 정의된 setPan 메소드를 살펴보자.
첫번째 인자인 what에는 어떤 속성을 설정할 것인지를 정의한다.
두번째, 세번째 인자는 뷰 내부에서 설정할 텍스트의 범위를,
마지막 인자는 안드로이드 공식 사이트의 Summary에서 쉽게 확인할 수 있다.
https://developer.android.com/reference/android/text/Spanned.html
Spanned | Android Developers
android.net.wifi.hotspot2.omadm
developer.android.com
'JAVA > Android' 카테고리의 다른 글
[JAVA][Android] Thread와 Handler의 사용법과 동기화 (0) | 2022.08.29 |
---|---|
[JAVA][Android] GlideUrl을 통해 Url에 권한 부여하기 (0) | 2022.08.18 |
[JAVA][Android] Bundle로 클래스 객체 전달하기 (0) | 2022.07.26 |
[JAVA][Android] JSON / GSON / JACKSON (0) | 2022.07.21 |
[JAVA][Android] ActivityResultLauncher를 이용한 액티비티 간의 통신 (0) | 2022.07.20 |