1. 특정 문자열 색상 설정
텍스트뷰의 문자열에서 특정 구간의 색상을 따로 설정하고 싶은 경우가 있습니다. 이 경우 아래와 같이 사용하면 됩니다.
val keyword = item.keyword
if (keyword != null && item.name.indexOf(keyword) != -1) {
val start = item.name.indexOf(keyword)
val end = keyword.length + start
var spannableString = SpannableString(item.name)
spannableString.setSpan(ForegroundColorSpan(
Color.parseColor("#FFFAD225")),
start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
binding.itemSearchText.setText(spannableString)
start는 특정 문자열이 전체 문자열에서 몇 번째에 시작하는지, end는 몇 번째에 끝나는지를 나타내는 변수입니다.
이후 spannableString을 사용해 이 구간 안에 있는 문자열에 대해서만 색상을 설정해주면 됩니다.
이후 이 spannableString을 텍스트뷰에 설정하면 됩니다.
2. 텍스트뷰 밑줄
텍스트뷰에 밑줄을 설정하는 방법은 다양하지만, 전 아래와 같은 방법을 주로 사용합니다.
binding.specificReviewGotoWrite.paintFlags = Paint.UNDERLINE_TEXT_FLAG
해당 플래그를 설정하면 간편하게 밑줄을 설정할 수 있습니다.
3. 특정 문자열 폰트 설정
위의 특정 문자열 색상을 바꾸는 것과 원리는 동일합니다.
그러나 API 수준에 따라서 다른 방법을 사용할 수 있습니다.
먼저 API 수준이 28보다 높다면, 위 방법을 사용할 수 있습니다.
val font = Typeface.create(ResourcesCompat.getFont(binding.root.context, R.font.noto_sans_kr_bold),
Typeface.NORMAL)
spannableString.setSpan(TypefaceSpan(font), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
그러나 API 수준이 28 이하라면 위 방법을 사용할 수 없습니다. 이 경우 커스텀 클래스를 사용하여 해결할 수 있습니다.
val font = Typeface.create(ResourcesCompat.getFont(binding.root.context, R.font.noto_sans_kr_bold),
Typeface.NORMAL)
spannableString.setSpan(CustomTypefaceSpan(font),start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
커스텀 클래스는 아래와 같습니다.
class CustomTypefaceSpan(private val typeface: Typeface?) : MetricAffectingSpan() {
override fun updateDrawState(paint: TextPaint) {
paint.typeface = typeface
}
override fun updateMeasureState(paint: TextPaint) {
paint.typeface = typeface
}
}
728x90
반응형
'Android > 정보' 카테고리의 다른 글
뷰페이저(ViewPager) 관련 짜투리 지식 1 (스와이프 및 애니메이션 제거, 스와이프 속도 조절) (0) | 2021.12.12 |
---|---|
텍스트뷰(TextView) 관련 짜투리 지식 2 (더보기 설정) (0) | 2021.12.11 |
Google Play Console 에서 앱 서명 키 관리할 경우 릴리즈 해시 키 얻는 방법 (0) | 2021.11.19 |