마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SpannableStringBuilder 사용시 제대로 반영이 안되는 문제..

0 추천

텍스트뷰의 색상을 바꿔주려고하는데요. 동작이 제 생각과 다른데

왜 이렇게되는지 잘 모르겠네요..

아래와 같이 구성했을경우 결과물은

 

가나 라마바사 아자차카 타파하

위 형태로 출력이되어야하는데, 

가나다 라마바사 아자차카 타파하

이렇게 전체가 빨간색으로 되어버리는데요..

제생각엔 String.valueOf(str.chatAt(i)) 이렇게하면

가,나,다, ,라, 이런식으로 한글자씩 가져오기때문에

결국 setSpan에서 범위가 0,1이 되어야하는게 맞고, 그대로 builder에 append해주면

해당 글자만 색상이 변경되어야할꺼라고생각하는데 동작은 그렇지 않아서요..알기쉽게 설명해주시면 감사하겠습니다..ㅠ

String str = "가나다 라마바사 아자차카 타파하";

SpannableStringBuilder builder = new SpannableStringBuilder();
for(int i=0; i<str.length(); i++){
    SpannableString ss  = new SpannableString(String.valueOf(str.charAt(i)));
    if (i == 3){
        ss.setSpan(new ForegroundColorSpan(Color.parseColor("#3BC651")), 0,1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        builder.append(ss);
    }else{
        ss.setSpan(new ForegroundColorSpan(Color.RED), 0,1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        builder.append(ss);
    }

}
textview.setText(builder);
익명사용자 님이 2016년 10월 12일 질문

1개의 답변

0 추천
 
채택된 답변
루프 돌리지 마시고

'다' 만 바꾸시는거면

SpannableStringBuilder 생성자 파라미터로 str 전체를 넣으시고

setSpan함수에서 2번째와 3번째 파라미터에 ~ 2, 3 ~  이렇게 하시기 바랍니다.

builder.setSpan(new ForegroundColorSpan(Color.parseColor("#3BC651")), 2, 3, ~

이렇게 해보세요.

 

참조 : http://ccdev.tistory.com/1
Development Guy (70,570 포인트) 님이 2016년 10월 12일 답변
왜 루프를돌리냐면..
실제로 개발중인부분은 Textview의 텍스트와 입력받은 Edittext의 텍스트를
한글자씩 비교해서 한글자씩 같으면 빨간색,틀리면 녹색으로 변경시켜주려고하고있거든요, 말씀하신대로하면 잘되긴하지만, 루프를돌리면안되서 왜이러는지잘모르겠네요..
마지막 파라미터 Spannable.SPAN_INCLUSIVE_INCLUSIVE 이거 넣어보시겠어요?
플래그조사도 다해봤는데, 여러플래그로 전환해봐도 안되네요.. 뭔가놓치고있는건지 어렵습니다 ㅜㅜ
SpannableStringBuilder builder = new SpannableStringBuilder(str);
for(int i=0; i<str.length(); i++){
    
    if (i == 3){
        builder.setSpan(new ForegroundColorSpan(color), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }else{
        
    }

}

대략 이런식으로 접근하시면 될거같은데...
SpannableString 안쓰시고 인덱스만 확인하면서 특정 인덱스에서 색깔 바꿔주는식으로..
다른방법으로 구현하였습니다.. ㅜㅜ 답변감사합니다!
...