KotlinでAndroidアプリのEditTextにおけるコピー&ペーストを無効にする方法
はじめに
本記事では、Kotlinを使用してAndroidアプリのEditTextにおけるカット・コピー・ペースト操作を無効にする方法を解説します。テキスト選択時に表示されるアクションメニューを制御することで、ユーザーによる意図しない編集やテキストの持ち出しを防ぐことができます。
仕組みのポイント
customSelectionActionModeCallbackに独自のActionMode.Callbackを設定し、onCreateActionMode()でfalseを返すことで、テキスト選択時のアクションモード(メニュー)自体が起動しなくなります。その結果、カット・コピー・ペーストの各操作が無効化されます。
手順1:新規プロジェクトの作成
Android Studioで新しいプロジェクトを作成します。「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成してください。
手順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"
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_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="40dp"
android:text=" Cut/copy/paste is Disabled"
android:textColor="@android:color/background_dark"
android:textSize="22sp"
android:textStyle="bold" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
手順3:MainActivity.ktにコードを追加
src/MainActivity.ktに以下のコードを追加します。
import android.os.Bundle
import android.view.ActionMode
import android.view.Menu
import android.view.MenuItem
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
lateinit var editText: EditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
editText = findViewById(R.id.editText)
editText.customSelectionActionModeCallback = object : ActionMode.Callback {
override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}
override fun onDestroyActionMode(mode: ActionMode) {}
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return false
}
}
}
}
ここでの重要な点は、onCreateActionMode()がfalseを返すことで、テキストを長押しした際に通常表示されるアクションメニューが生成されなくなるという点です。
手順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.q11">
<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端末がパソコンに接続されているものとします。Android Studioからアプリを実行するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーの「Run」アイコン
をクリックします。プルダウンから接続済みのモバイルデバイスを選択すると、端末にアプリの初期画面が表示されます。

EditText内のテキストを長押ししても、カット・コピー・ペーストのメニューが表示されないことを確認できます。これにより、EditTextへの入力および出力の両方向でクリップボード経由の操作が完全に無効化されています。
-
AndroidアプリでEditTextのコピー&ペーストを無効化する方法を徹底解説
Androidアプリ開発では、セキュリティやUXの要件によって、EditTextに入力されたテキストのカット・コピー・ペースト操作を無効化したいケースがあります。本記事では、setCustomSelectionActionModeCallback()を使って、テキスト選択時に表示されるアクションモード(コンテキストメニュー)自体を表示させないことで、コピー/貼り付け機能を無効にする実装方法を、ステップごとにわかりやすく解説します。 実装の仕組み EditText上でテキストを長押しすると、Androidは「ActionMode」と呼ばれる浮動ツールバーを表示し、そこからカット・コピー・ペースト
-
KotlinでAndroidのギャラリーから画像を選択して表示する方法を徹底解説
はじめにこの記事では、Kotlinを使用してAndroid端末の画像ギャラリーから画像を選択し、アプリ内に表示する方法をステップごとに解説します。Intentを使ったシンプルな実装なので、Android開発初心者の方でもすぐに試せる内容になっています。手順1:新規プロジェクトの作成まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目を入力してプロジェクトを作成してください。手順2:レイアウトファイル(activity_main.xml)の編集res/layout/activity_main.xmlに以下のコ