안드로이드 텍스트뷰(TextView) 일부 부분 속성 변경
회사에서 웹앱 프로젝트를 진행하다가 TextView에 일부 텍스트만 글자색을 다르게해야할 일이 생겼다.
여러개의 TextView를 사용해도되지만 그냥 공부도 할겸 구글링을 해보았다.
val content = binding.tutorialTitleBottom.text.toString() //1
val spannableStringBuilder = SpannableStringBuilder(content) //2
val purpleWord1 = "통신비 할인" //3
val startIdx1 = content.indexOf(purpleWord1) //4
val endIdx1 = startIdx1.plus(purpleWord1.length)
val purpleWord2 = "모빌카드 혜택"
val startIdx2 = content.indexOf(purpleWord2)
val endIdx2 = startIdx2.plus(purpleWord2.length)
val colorSpan1 = ForegroundColorSpan(Color.parseColor("#764CCB")) //5
val colorSpan2 = ForegroundColorSpan(Color.parseColor("#764CCB"))
spannableStringBuilder.setSpan(colorSpan1, startIdx1, endIdx1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //6
spannableStringBuilder.setSpan(colorSpan2, startIdx2, endIdx2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
binding.tutorialTitleBottom.text = spannableStringBuilder //7
1 => 텍스트뷰의 글자를 가져온다,
2 => SpannableStringBuilder 객체를 만들어준다.
3 => 글자 속성을 변경할 텍스트를 정한다.
4 => 글자 속성을 변경할 텍스트의 인덱스(시작과 끝)을 정한다.
5 => 변경할 색상을 정한다.
6 => SpannableStringBuilder에 변경할 텍스트와 속성을 넣는다.
7 => SpannableStringBuilder를 텍스트뷰에 적용한다.
✋ TextView의 글자를 여러개 변경해줘야한다면 5에서처럼 ForegroundColorSpan을 각각 따로 만들어주어야한다!
✋ StyleSpan은 글자의 스타일(BOLD, ITALIC) / RelativeSizeSpan은 글자의 상대적 크기 변경
ex)
spannableString.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new RelativeSizeSpan(1.3f), start, end, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);