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

안드로이드 앱에서 EditText 복사/붙여넣기 비활성화하는 방법

이 튜토리얼에서는 안드로이드 앱에서 EditText 위젯의 복사/잘라내기/붙여넣기 기능을 비활성화하는 방법을 단계별로 알아봅니다. 사용자가 입력 필드의 텍스트를 임의로 복사하거나 외부 내용을 붙여넣지 못하도록 제어해야 하는 경우에 유용하게 활용할 수 있습니다.

핵심 원리: setCustomSelectionActionModeCallback()

EditText에서 텍스트를 길게 누르면 시스템이 ActionMode(텍스트 선택 툴바)를 생성하며, 여기에 잘라내기·복사·붙여넣기 메뉴가 나타납니다. 이 ActionMode의 콜백을 커스터마이징하여 onCreateActionMode()에서 false를 반환하면 해당 메뉴 자체가 생성되지 않아 복사/붙여넣기를 사실상 차단할 수 있습니다.

1단계 — 새 프로젝트 생성

Android Studio에서 File → New Project를 선택하고, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.

2단계 — 레이아웃 작성 (res/layout/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"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_marginTop="40dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="22sp"
        android:textStyle="bold"
        android:layout_centerHorizontal="true"
        android:text="Cut/copy/paste is Disabled" />

    <EditText
        android:id="@+id/editText"
        android:layout_centerInParent="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

3단계 — MainActivity 구현 (src/MainActivity.java)

setCustomSelectionActionModeCallback()을 사용해 텍스트 선택 시 나타나는 ActionMode 메뉴가 만들어지지 않도록 처리합니다.

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    EditText editText;

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

        editText = findViewById(R.id.editText);

        editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                // ActionMode(복사/붙여넣기 메뉴) 생성을 차단
                return false;
            }

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                return false;
            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {
                // 필요한 정리 작업이 있다면 여기서 처리
            }
        });
    }
}

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 버튼을 클릭해 앱을 실행합니다. 실행 옵션으로 연결된 모바일 기기를 선택하면, 기본 화면이 아래와 같이 표시됩니다.

안드로이드 앱에서 EditText 복사/붙여넣기 비활성화하는 방법

앱이 실행되면 EditText를 길게 눌러도 잘라내기·복사·붙여넣기 메뉴가 나타나지 않는 것을 확인할 수 있습니다.

추가 팁: 더 강력한 차단 방법

위 방법만으로는 일부 기기나 롱프레스 이벤트를 우회하는 동작까지 완벽히 막기 어려울 수 있습니다. 다음 방법을 함께 적용하면 더 확실합니다.

  • 롱클릭 비활성화: editText.setLongClickable(false);를 호출하면 텍스트 선택 자체가 발생하지 않습니다.
  • 붙여넣기 차단: onTextContextMenuItem()을 오버라이드하여 android.R.id.paste 항목일 때 true를 반환하면 붙여넣기 이벤트를 가로챌 수 있습니다.
  • 클립보드 감시: API 29(Android 10)부터는 백그라운드 앱의 클립보드 접근이 제한되므로, 최신 OS 환경에서는 시스템 차원에서도 일부 제어가 가능합니다.

이처럼 setCustomSelectionActionModeCallback()과 함께 보조적인 처리를 조합하면, EditText의 복사/붙여넣기를 목적에 맞게 효과적으로 제어할 수 있습니다.