Android (안드로이드)

[Java] PaintFlag / SpannableString / 텍스트에 줄 긋기 / 밑줄 · 취소선 긋기 / 일부분만 적용

Oscar:) 2024. 3. 1. 23:05

 

 

 

이번 포스팅에서는 텍스트에 줄 긋는 방법을 알아보겠다.

 

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 등의 텍스트에도 적용할 수 있다..!