만족

[Android] TextView에 부분 폰트 스타일 적용하기 본문

[Android] TextView에 부분 폰트 스타일 적용하기

FrontEnd/Android Satisfaction 2021. 7. 5. 21:24

저런걸 어떻게 하는지 알아볼 것이다.

 

방법1: SpannableString

public class ViewUtil {
  public static SpannableString colorString(int color, String text, String... wordsToColor) {
    SpannableString coloredString = new SpannableString(text);
    
    for (String word : wordsToColor) {
      int startColorIndex = text.indexOf(word);
      int endColorIndex = startColorIndex + word.length();
      if (startColorIndex >= 0)
        coloredString.setSpan(new ForegroundColorSpan(color), startColorIndex, endColorIndex,
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
    
    return coloredString;
  }
  ...
}

위의 colorString 메서드를 원하는 곳에 집어넣는다.

(나의 경우엔 ViewUtil클래스에 넣었다)

textView.setText(ViewUtil.colorString(getResource().getColor(R.color.red), "안녕하세요", "안녕"));

적용할 때 String을 그냥 넣지 말고, colorString으로 감싸서 넣는다.

 

매개변수는 다음과 같다.

colorString(색상코드, textView에 적용할 스트링 전문, 색상코드를 적용할 텍스트)

이제 안녕하세요 처럼 표시된다.

 

방법2: HTML(Spanned)

public class ViewUtil {
  public static Spanned colorString(String color, String text, String... wordsToColor) {
    String result= new String(text);
    for (String word : wordsToColor) {
      result= result.replaceAll(word, String.format("<font color='%s'>%s</font>", color, word);
    }
    
    return Html.fromHtml(result);
  }
  ...
}

위의 colorString 메서드를 원하는 곳에 집어넣는다.

(나의 경우엔 ViewUtil클래스에 넣었다)

 

HTML형식의 String에서 표현 가능한 속성들을 HTML 타입의 데이터로 변환하는 함수다.

 

textView.setText(ViewUtil.colorString("#FF0000", "안녕하세요", "안녕"));

색상 코드를 전달하거나, HTML에서 표현 가능한 색상값(red, green, aqua 등)을 스트링으로 전달해 준다는 점이 방법1과 다르다.

 

아무튼 얘도 안녕하세요 처럼 표시된다.

 



Comments