-
[TextView] 안드로이드 TextView의 모든 것 3 - 특정 문자열 속성 바꾸기Android/개발 2018. 11. 12. 20:05
안드로이드 텍스트뷰의 모든것 3
특정 문자열 색상, 크기, 스타일 등 바꾸기
TextView를 사용하다보면 글자 색이나 크기 등을 바꿔야 할 때가 있습니다. 기본적으로 TextView의 글자 색을 바꾸고 싶을 때는 기본 속성인 textColor를, 글자 크기를 바꾸고 싶을때는 textSize를 이용하면 되죠. 하지만 기본속성을 이용하면 TextView의 전체 글자의 색상이나 크기가 변경됩니다.
그래서 TextView의 글자 중 특정 문자열의 색상이나 크기, 스타일 등을 바꾸려면 SpannableString 클래스를 사용합니다. SpannableString 클래스를 사용하는 것 간단하게 4단계면 됩니다.
1. SpannableString 객체(spannableString)생성
2. TextView의 글자에서 특정 문자열의 시작 위치와 끝 위치 얻어오기
3. spannableString의 속성 지정
4. 색이나 크기가 바뀐 spannableString을 TextView에 넣어주기
1. SpannableString 객체 생성
String content = textView.getText().toString();
SpannableString spannableString = new SpannableString(content);- TextView의 글자를 가져와서 spannableString 객체를 만들어줍니다.
2. 특정 문자열의 시작 위치와 끝 위치 얻어오기
String word = "안드로이드";
int start = content.indexOf(word);
int end = start + word.length();- String의 indexOf 함수를 이용해서 특정 문자열의 시작 위치를 얻어옵니다.
- 시작위치에서 특정 문자열의 길이만큼을 더해 끝 위치를 얻어옵니다.
- 여기서 content는 TextView의 글자입니다.
3. SpannableString 속성 지정(색상, 크기, 스타일 등 바꾸기)
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FF6702")), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new RelativeSizeSpan(1.3f), start, end, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);- setSpan(속성, 시작 위치, 끝 위치, 플래그)
// 플래그 값이 어떤 역할인지는 정확히는 모르겠습니다.. 아시는 분이 있으시다면 댓글 남겨주시면 감사하겠습니다^^
- 첫 번째 줄의 ForegroundColorSpan은 글자의 색상을 지정해줍니다. (BackgroundColorSpan 속성은 배경색을 지정)
- 두 번째 줄의 StyleSpan은 글자의 스타일을 지정해줍니다. (BOLD, ITALIC 등)
- 세 번째 줄의 RelativeSizeSpan은 글자의 상대적 크기를 지정해줍니다. (1.3f는 1.3배)
// AbsoluteSizeSpan을 사용하시면 절대적 크기를 지정해줍니다.
- 그 외에도 아래 이미지처럼 많은 속성이 있습니다.
4. 만들어진 spannableString을 TextView에 넣어주기
textView.setText(spannableString);
- 이렇게 간단하게 특정 문자열의 속성을 바꿀 수 있습니다.
전체소스
package com.imaec.forblog;
import android.graphics.Color;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.StyleSpan;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.textView);
// 1
String content = textView.getText().toString();
SpannableString spannableString = new SpannableString(content);
// 2
String word = "안드로이드";
int start = content.indexOf(word);
int end = start + word.length();
// 3
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FF6702")), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new RelativeSizeSpan(1.3f), start, end, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
// 4
textView.setText(spannableString);
}
}- 결과
- 전체 문자열에서 '안드로이드'의 색상과 크기, 두께가 달라진걸 보실 수 있습니다.
이렇게 간단하게 특정 문자열의 색상, 크기, 스타일 등을 변경하는 방법을 알아봤습니다! 위의 방법을 쓰면 첫 번째 특정 문자열만 속성이 적용되게 되는데 모든 특정 문자열의 속성을 적용시키는 방법은 setSpan 함수를 for문으로 돌리면 됩니다! 자세한 방법이 궁금하면 댓글로 남겨주세요^^
그럼 모두 열코하세요!
안드로이드 TextView의 모든 것 1 - 기초편 보러가기
안드로이드 TextView의 모든 것 2 - TextView 모서리 둥글게해서 버튼만들기 보러가기
'Android > 개발' 카테고리의 다른 글
[RecyclerView] 안드로이드 리사이클러뷰 아이템 클릭 (13) 2018.11.13 [RecyclerView] 안드로이드 리사이클러뷰 기본 사용법 (12) 2018.11.13 [TextView] 안드로이드 TextView의 모든 것 2 - 모서리 둥글게 버튼 만들기 (1) 2018.11.02 [TextView] 안드로이드 TextView의 모든 것 1 - 기초 (2) 2018.10.29 [ViewPager] 안드로이드 ViewPager 사용하기(양쪽 페이지 미리보기) (9) 2018.10.28 댓글