안드로이드를 하다보면 TextView나 Button 등에서 문자열의 일부의 색상, 크기, 스타일 등을 바꿔주어야 할 때가 있다.
LinearLayout을 통해서 TextView를 여러개 넣고 각각 하면 되지 않냐고 물을 수 있는데, 그렇게 되면 Xml 코드량이 늘어날 수 있기 때문에 좋지 않은 방법이다.
그래서 안드로이드에서는 SpannableString 클래스를 제공한다.
간단하게 요약하면
1. SpannableString 객체 생성.
2. TextView나 Button의 글자에서 특정 문자열의 시작 위치와 끝 위치 얻기.
3. spannableString의 속성 지정.
4. 변경된 spannableString을 TextView에 넣기.
위 순서대로 살펴보자.
1. SpannableString 객체 생성
String content = textView.getText().toString(); // TextView나 Button 등의 글자를 가져옴.
SpannableString spannableString = new SpannableString(content); // spannableString 객체 생성.
2. TextView나 Button의 글자에서 특정 문자열의 시작 위치와 끝 위치 얻기
String word = "하루"; // "행복한 하루 보내세요." 라는 Text에서 "하루"를 바꿀 예정.
int start = content.indexOf(word); // indexOf 함수를 이용해서 특정 문자열의 시작 위치를 변수에 저장.
int end = start + word.length(); // 시작위치의 인덱스에 word 변수의 길이만큼을 더해 end 변수에 저장.
3. SpannableString 속성 지정(색상, 크기, 스타일 등)
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#000000")), 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);
o setSpan(속성, 시작 위치, 끝 위치, 플래그)
o ForegroundColorSpan : 글자 색상 지정. (BackgroundColorSpan : 배경색 지정)
o StyleSpan : 글자 스타일 지정. (BOLD, ITALIC 등)
o RelativeSizeSpan : 글자의 상대적 크기 지정. (1.3f는 1.3배)
o java에 Span을 입력하면 이보다 더 많은 속성이 있다.
4. 변경된 spannableString을 TextView에 넣기.
textView.setText(spannableString);
이렇게 하면 TextView나 Button등 일부 글자의 색상, 크기, 스타일 등을 손 쉽게 바꿀 수 있다.
참고 : https://dev-imaec.tistory.com/26
'기타 > Android' 카테고리의 다른 글
[Android] Toolbar 뒤로가기 버튼 만들기 (0) | 2022.08.12 |
---|---|
[Android] BottomNavigationView(하단 바) 설정하기 (0) | 2022.08.10 |
[Android] Toolbar(상단 바) 설정하기 (0) | 2022.08.08 |
[Android] Navigation View Header에 사용자 정보 띄우기 (0) | 2022.05.28 |
[Android] openSSL로 Key Hash(해시 키) 구하는 방법 (0) | 2022.05.12 |