본문 바로가기
안드로이드 자바

[Java][Android] SpannableString 로 TextView 특정 단어만 색 바꾸기 & 클릭 이벤트 주기

by teamnova 2025. 4. 13.
728x90

 

안녕하세요, 

 

안드로이드 앱을 만들다 보면 TextView 안의 특정 단어에만 색을 입히거나, 클릭 이벤트를 부여하고 싶을 때가 있습니다.


예를 들어, 서비스 약관 동의 문장에서 “약관 보기” 같은 텍스트만 파랗게 하고 클릭 가능하게 만들고 싶을 때가 있죠.

 

이럴 때 사용할 수 있는 기능이 바로 SpannableString입니다.


이 글에서는 SpannableString을 활용하여 TextView의 일부만 색칠하고, 클릭 이벤트를 설정하는 예제를 만들어보도록 하겠습니다. 

 

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);

        String content = "이용약관에 동의하시겠습니까?";
        SpannableString spannable = new SpannableString(content);

        // "이용약관" 단어 위치 지정
        int start = content.indexOf("이용약관");
        int end = start + "이용약관".length();

        // 색상 변경 (파란색)
        spannable.setSpan(new ForegroundColorSpan(Color.BLUE), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        // 클릭 이벤트 설정
        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(@NonNull View widget) {
                Toast.makeText(hh.this, "이용약관 클릭됨!", Toast.LENGTH_SHORT).show();



            }

        };

        spannable.setSpan(clickableSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        textView.setText(spannable);
        textView.setMovementMethod(LinkMovementMethod.getInstance()); // 클릭 활성화
    }
}

 

 


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:padding="24dp">

    <TextView
        android:id="@+id/textView"
        android:textSize="18sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000" />
</LinearLayout>

 

 

 

시연 영상입니다.