Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드 TextView에서 특정 텍스트만 굵게 표시하는 방법 (SpannableString 활용)

안드로이드 앱을 개발하다 보면 TextView의 전체 텍스트가 아니라 특정 단어나 구절만 굵게(bold) 표시해야 하는 경우가 종종 있습니다. 예를 들어 강조하고 싶은 문구나 핵심 키워드만 눈에 띄게 만들고 싶을 때 유용한데요.

이번 글에서는 SpannableStringStyleSpan을 사용하여 TextView 내부의 특정 텍스트만 굵게 처리하는 방법을 단계별로 알아보겠습니다.

핵심 개념: SpannableString과 StyleSpan

본격적인 예제에 앞서 두 가지 핵심 클래스를 간단히 살펴보겠습니다.

  • SpannableString: 문자열 전체가 아닌 일부 범위(인덱스)에만 스타일을 적용할 수 있게 해주는 클래스입니다.
  • StyleSpan: 굵게(BOLD), 기울임(ITALIC) 등 텍스트 스타일을 정의하는 Span 객체입니다.

setSpan() 메서드는 (적용할 Span, 시작 인덱스, 끝 인덱스, 플래그) 순서로 인자를 받으며, 지정한 인덱스 범위의 텍스트에만 스타일이 적용됩니다.

Step 1 — 새 프로젝트 생성

Android Studio를 실행하고 File → New Project 메뉴로 이동한 뒤, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.

Step 2 — 레이아웃 파일 작성 (activity_main.xml)

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
   xmlns:android="https://schemas.android.com/apk/res/android"
   android:id="@+id/coordinator_layout"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
   <TextView
      android:id="@+id/textView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="40sp"
      android:layout_gravity="center"
      android:layout_margin="25dp" />
</RelativeLayout>

여기서는 화면 중앙에 큰 글씨(40sp)로 텍스트를 표시할 TextView 하나를 배치했습니다.

Step 3 — MainActivity 작성 (MainActivity.java)

src/MainActivity.java 파일에 아래 코드를 추가합니다.

import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.StyleSpan;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
   TextView textView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      textView = (TextView) findViewById(R.id.textView);
      String text = "My favourite food is Biriyani";
      SpannableString ss = new SpannableString(text);
      StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
      ss.setSpan(boldSpan, 21, 29,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
      textView.setText(ss);
   }
}

코드 상세 설명

  • "My favourite food is Biriyani" 문자열에서 "Biriyani"는 21번째 인덱스부터 시작해 29번째 인덱스 직전까지 위치합니다.
  • ss.setSpan(boldSpan, 21, 29, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)를 호출하면 해당 범위의 텍스트에만 굵은 스타일이 적용됩니다.
  • SPAN_EXCLUSIVE_EXCLUSIVE 플래그는 스팬 범위의 앞뒤에 삽입되는 텍스트에는 스타일이 확장되지 않도록 지정합니다.

참고: 최신 프로젝트에서는 AppCompatActivity 임포트 경로가 androidx.appcompat.app.AppCompatActivity로 변경되었으니, AndroidX를 사용하는 환경이라면 임포트 구문을 맞게 수정하세요.

Step 4 — 매니페스트 확인 (AndroidManifest.xml)

androidManifest.xml 파일이 아래와 같이 작성되어 있는지 확인합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample" >
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:supportsRtl="true"
      android:theme="@style/AppTheme" >
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>
</manifest>

애플리케이션 실행 및 결과 확인

이제 앱을 실행해 보겠습니다. 실제 안드로이드 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run(실행) 아이콘을 클릭하고, 목록에서 본인의 모바일 기기를 선택하세요.

앱이 실행되면 다음과 같이 TextView에 표시된 문장 중 "Biriyani" 부분만 굵게 강조된 것을 확인할 수 있습니다.

안드로이드 TextView에서 특정 텍스트만 굵게 표시하는 방법 (SpannableString 활용)

마무리

이처럼 SpannableString + StyleSpan 조합을 사용하면 XML 속성 수정 없이도 자바(또는 코틀린) 코드만으로 TextView의 특정 텍스트에 굵기, 색상, 기울임 등 다양한 스타일을 동적으로 적용할 수 있습니다. 채팅 앱의 멘션 강조, 검색 결과의 키워드 하이라이트 등 실무에서도 자주 활용되는 기법이니 꼭 익혀두시길 추천합니다.