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

[JAVA][Android] MovementMethod을 사용하여 텍스트 뷰에 각각 클릭기능 부여하기

by teamnova 2024. 10. 1.
728x90

MovementMethod 는 기본적으로 텍스트 뷰 내에서 특정 동작을 처리할 수 있도록 하는 인터페이스입니다. 특히, 링크 처리, 스크롤, 또는 특정 텍스트 부분을 클릭할 때 수행해야 하는 작업을 정의할 수 있습니다.

 

  • 하이퍼링크: 이메일 주소, 웹 사이트 URL, 전화번호 등을 텍스트로 표시하고, 이를 클릭했을 때 해당 앱이나 웹 페이지를 열 수 있습니다. 예를 들어, 고객 지원 이메일을 클릭하면 이메일 앱이 열리게 할 수 있습니다.
  • 앱 내 내비게이션: FAQ, 사용자 가이드, 개인정보 처리 방침 등의 앱 내 링크를 통해 사용자가 앱 내에서 특정 화면으로 쉽게 이동할 수 있게 합니다.
  • 인터렉티브 메시지: 채팅 앱이나 메시지 앱에서 특정 키워드에 반응하여 바로 답변을 제안하거나 관련 정보를 보여줄 수 있습니다.
  • 양식 동의: 이용 약관이나 개인정보 처리 방침에 대한 동의를 받는 페이지에서 "여기를 클릭"과 같은 텍스트를 설정하여, 사용자가 이를 클릭해 약관을 읽고 동의할 수 있게 합니다.

정리를 하면 MovementMethod는 Android 앱에서 텍스트 기반의 UI를 좀 더 풍부하게 만들고, 사용자와의 상호작용을 강화하는 데 유용한 도구입니다. 사용자의 앱 경험을 향상시키고, 다양한 기능을 간편하게 구현할 수 있습니다.

 

 

MainActivity

 


import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

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

        TextView textView = findViewById(R.id.textView);

        // 클릭 가능한 텍스트 설정
        String text = "첫 번째 텍스트를 클릭하면 첫 번째 메시지가, 두 번째 텍스트를 클릭하면 두 번째 메시지가 출력됩니다!";
        SpannableString spannableString = new SpannableString(text);

        // 첫 번째 클릭 가능한 부분 설정
        ClickableSpan firstClickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                // 첫 번째 클릭 이벤트 처리
                Toast.makeText(MainActivity.this, "첫 번째 메시지가 출력되었습니다!", Toast.LENGTH_SHORT).show();
            }
        };

        // 두 번째 클릭 가능한 부분 설정
        ClickableSpan secondClickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                // 두 번째 클릭 이벤트 처리
                Toast.makeText(MainActivity.this, "두 번째 메시지가 출력되었습니다!", Toast.LENGTH_SHORT).show();
            }
        };

        // "첫 번째 텍스트" 부분에 클릭 가능한 Span 설정
        spannableString.setSpan(firstClickableSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        // "두 번째 텍스트" 부분에 클릭 가능한 Span 설정
        spannableString.setSpan(secondClickableSpan, 26, 34, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        textView.setText(spannableString);

        // TextView에 링크를 활성화하기 위해 MovementMethod 설정
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="첫 번째 텍스트를 클릭하면 첫 번째 메시지가, 두 번째 텍스트를 클릭하면 두 번째 메시지가 출력됩니다!"
        android:textColor="@android:color/black"
        android:autoLink="none"/>
</LinearLayout>

 

시연 영상