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>
시연 영상입니다.
'안드로이드 자바' 카테고리의 다른 글
[Java][Android] SpannableString 와 ImageSpan으로 TextView에 아이콘 넣기 (0) | 2025.04.20 |
---|---|
[Java][Android] InputFilter 사용해서 글자 수 제한하기 (0) | 2025.04.15 |
[Java][Android]Web3j 활용해 지갑 주소 생성하기 (0) | 2025.04.11 |
[Java][Android] Timer 클래스 활용해 카운트 작업 하기 (0) | 2025.04.08 |
[Java][Android] BottomSheet에 CalendarView띄워서 날짜 선택하기 (0) | 2025.04.06 |