이번 포스팅에서는 텍스트에 줄 긋는 방법을 알아보겠다.
ex)
밑줄
취소선
2가지 방법을 소개한다.
● View에 PaintFlag를 세팅하고 Paint 클래스 활용
● SpannableString 클래스 활용
PaintFlag
기본 문법은 다음과 같다.
TextView textView = findViewById(R.id.textView);
...
textView.setPaintFlags(Paint 클래스 내 속성 값);
Paint 클래스 내 속성 값은 해당 클래스를 들어가보면 확인할 수 있다.
✅ 밑줄
TextView textView = findViewById(R.id.textView);
...
textView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
결과)
✅ 취소선
TextView textView = findViewById(R.id.textView);
...
textView.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
결과)
SpannableString
위 PaintFlag를 활용해도 충분하지만,
본인은 텍스트의 일부분에만 줄을 긋고 싶었다.
PaintFlag를 사용하여 일부분에만 줄을 긋는 방법은 찾을 수 없었고,
다른 방법을 알아보다가 SpannableString 클래스를 알게 되었다.
일단 기본적인 문법은 다음과 같다.
TextView textView = findViewById(R.id.textView);
...
SpannableString spannableString = new SpannableString(텍스트);
spannableString.setSpan(적용할 속성 클래스,
시작지점 인덱스,
끝나는지점 인덱스,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
✅ 밑줄
TextView textView = findViewById(R.id.textView);
...
SpannableString spannableString = new SpannableString(textView.getText().toString());
spannableString.setSpan(new UnderlineSpan(),
0,
textView.getText().length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
밑줄은 UnderlineSpan 클래스를 사용하고
텍스트 전부 밑줄을 긋기 위해 시작 지점은 0, 끝나는 지점은 텍스트의 길이를 넣었다.
그리고 해당 SpannableString을 텍스트뷰에 setText() 해주면 된다.
결과)
✅ 취소선
TextView textView = findViewById(R.id.textView);
...
SpannableString spannableString = new SpannableString(textView.getText().toString());
spannableString.setSpan(new StrikethroughSpan(),
0,
textView.getText().length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
전체적인 문법은 동일하고, 취소선은
StrikethroughSpan 클래스를 사용한다.
결과)
✅ 일부분에만 적용하기 (+ 일부분 크기 조절하기)
1,000원→ 500원
위 텍스트처럼 1,000원 부분에만 취소선을 그어보자.
취소선을 긋는 김에 해당부분의 텍스트 크기도 줄여보겠다.
TextView textView = findViewById(R.id.textView);
...
SpannableString spannableString = new SpannableString(textView.getText().toString());
spannableString.setSpan(new StrikethroughSpan(), 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new RelativeSizeSpan(0.7f), 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
Span을 적용할 길이만큼 지정해주었다. (6)
RelativeSizeSpan 클래스를 참조하여 텍스트 사이즈를 줄이거나 늘릴 수 있다.
결과)
TextView를 2개 사용하지 않고도 위와 같은 효과를 볼 수 있다.
위에서 소개한 2가지 방법 모두 TextView 뿐만 아니라
Button 등의 텍스트에도 적용할 수 있다..!
'Android (안드로이드)' 카테고리의 다른 글
[Android] onBackPressed / OnBackPressedDispatcher / 기기 · 시스템 뒤로가기 버튼 / 두 번 눌러서 뒤로가기 (0) | 2024.03.11 |
---|---|
[Android] Google AdMob / 앱에 광고 붙이기 / 배너 광고 (2) | 2024.03.07 |
[Android] Hilt / 힐트 / 예제 / 의존성 주입 라이브러리 (0) | 2024.02.25 |
[Android] Dagger / 대거 / 예제 / 의존성 주입 라이브러리 (0) | 2024.02.24 |
[Android] 의존성 주입 / Dependency Injection (0) | 2024.02.23 |