안드로이드 textview의 반만 색을 바꿀수 있을까요?

조회수 2219회

에브리타임에서 구현되는 것처럼 10시 15분이라면 15분인 1/4만 색이 들어가게 변경하고 싶은데, 어떻게 구현하면 될까요? textview를 통해 구현하고 있습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 텍스트 단위별로 색깔을 주고 싶으시다면 두가지 방법이 있습니다.

    ([ ] 로 표시해놓은 부분은 코드 작성 시 바꿔야 합니다)

    - Html 사용

    // kotlin 코드
    val htmlText = Html.fromText("<font color='#[hex 색상1]'>[글자1]</font><font color='#[hex 색상2]'>[글자2]</font>")
    [텍스트 뷰].text = if(Build.VERSION.SDK_INT < 24) @Suppress("DEPRECATION") Html.fromHtml(htmlText) else Html.fromHtml(htmlText, Html.FROM_HTML_MODE_COMPACT)
    
    // 자바 코드
    String htmlText = Html.fromHtml("<font color='#[hex 색상1]'>[글자1]</font><font color='#[hex 색상2]'>[글자2]</font>");
    f(Build.VERSION.SDK_INT < 24) @SuppressWarnings("deprecation") [텍스트 뷰].setText(Html.fromHtml(htmlText));
    else [텍스트 뷰].setText(Html.fromHtml(htmlText, Html.FROM_HTML_MODE_COMPACT));
    

    이건 매우 기초적인 html 태그들(b, br, p, em 등등) 은 받아서 밑에 소개할 SpannableString과 비슷한 것으로 변환시켜줍니다. (Spanned인가?) " " 안에 '매우 기초적인 html 태그들' 을 넣어도 됩니다.

    - SpanableString 사용

    // kotlin 코드
    SpannableString text = SpannableString([텍스트])
    text.setSpan(ForegroundColorSpan([색상 코드]), [시작 위치], [끝 위치], Spanned.SPAN_INTERMEDIATE)
    text.setSpan(ForegroundColorSpan([색상 코드]), [시작 위치], [끝 위치], Spanned.SPAN_INTERMEDIATE)
    [텍스트 뷰].text = text
    // ...
    

    ktx를 쓰신다면 text.setSpan(ForegroundColorSpan([색상 코드]), [시작 위치], [끝 위치], Spanned.SPAN_INTERMEDIATE) -> text[[시작 위치]..[끝 위치]] = ForegroundColorSpan([색상 코드]) (예: text[0..4] = ForegroundColorSpan(Color.rgb(12,34,56))) 라고 바꿔도 됩니다.

    // java 코드
    SpannableString text = new SpannableString([텍스트]);
    text.setSpan(new ForegroundColorSpan(), [시작 위치], [끝 위치], Spanned.SPAN_INTERMEDIATE);
    text.setSpan(new ForegroundColorSpan(), [시작 위치], [끝 위치], Spanned.SPAN_INTERMEDIATE);
    // ...
    [텍스트 뷰].setText(text);
    

    ForegroundColorSpan 이외에도 여러 종류가 있으니 쓰시면 됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)