Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Android】アプリ内でテキストをプログラム的にコピー(Ctrl+C相当)する方法

この記事では、Androidアプリ内でテキストをプログラム的にクリップボードへコピーする(PCでいうCtrl+Cに相当する処理)方法を、実際のサンプルコードとともに解説します。

クリップボードを操作するには、Androidが標準で提供しているClipboardManagerクラスを使用します。本チュートリアルでは、EditTextに入力したテキストを「コピー」ボタンでクリップボードに保存し、「貼り付け」ボタンでTextViewに表示するシンプルなアプリを作成します。

実装手順

ステップ1:Android Studioで新規プロジェクトを作成する

Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。

ステップ2:レイアウトファイル(res/layout/activity_main.xml)を編集する

以下のコードを res/layout/activity_main.xml に追加します。テキスト入力用のEditText、コピー用と貼り付け用の2つのButton、結果を表示するTextViewを縦方向に配置しています。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
   android:gravity="center"
   tools:context=".MainActivity">
   <EditText
      android:id="@+id/editText"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:hint="Enter your text"/>
   <Button
      android:onClick="CopyText"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginTop="5dp"
      android:text="Copy text"/>
   <Button
      android:onClick="PasteText"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginTop="5dp"
      android:text="Paste text" />
   <TextView
      android:id="@+id/textView"
      android:layout_marginTop="30dp"
      android:textSize="16sp"
      android:textStyle="bold"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" />
</LinearLayout>

ステップ3:MainActivity.java を実装する

続いて、src/MainActivity.java に以下のコードを追加します。

import androidx.appcompat.app.AppCompatActivity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
   EditText editText;
   TextView textView;
   ClipboardManager clipboardManager;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      editText = findViewById(R.id.editText);
      textView = findViewById(R.id.textView);
   }
   public void CopyText(View view) {
      String text = editText.getText().toString();
      if (!text.isEmpty()) {
         clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
         ClipData clipData = ClipData.newPlainText("key", text);
         clipboardManager.setPrimaryClip(clipData);
         Toast.makeText(getApplicationContext(), "Copied", Toast.LENGTH_SHORT).show();
      } else {
         Toast.makeText(getApplicationContext(), "No text to be copied", Toast.LENGTH_SHORT).show();
      }
   }
   public void PasteText(View view) {
      ClipData clipData = clipboardManager.getPrimaryClip();
      assert clipData != null;
      ClipData.Item item = clipData.getItemAt(0);
      textView.setText(item.getText().toString());
      Toast.makeText(getApplicationContext(), "Text is being Pasted", Toast.LENGTH_SHORT).show();
   }
}

ポイント:

  • コピー処理では、getSystemService(Context.CLIPBOARD_SERVICE) でClipboardManagerのインスタンスを取得し、ClipData.newPlainText() で作成したデータを setPrimaryClip() でクリップボードにセットします。
  • 貼り付け処理では、getPrimaryClip() でクリップボードの内容を取得し、getItemAt(0) で先頭のアイテムを取り出してTextViewに表示しています。
  • 実運用では、クリップボードが空の場合やnullの場合のチェックを追加すると、より安全な実装になります。

ステップ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スマートフォンがパソコンに接続されているものとします。Android Studioからアプリを起動するには、プロジェクト内のアクティビティファイルをいずれか開き、ツールバーの「Run」アイコンをクリックします。表示された選択肢から自分のモバイルデバイスを選択して実行すると、スマートフォンに以下のような画面が表示されます。

【Android】アプリ内でテキストをプログラム的にコピー(Ctrl+C相当)する方法


【Android】アプリ内でテキストをプログラム的にコピー(Ctrl+C相当)する方法

  1. AndroidアプリでEditTextのコピー&ペーストを無効化する方法を徹底解説

    Androidアプリ開発では、セキュリティやUXの要件によって、EditTextに入力されたテキストのカット・コピー・ペースト操作を無効化したいケースがあります。本記事では、setCustomSelectionActionModeCallback()を使って、テキスト選択時に表示されるアクションモード(コンテキストメニュー)自体を表示させないことで、コピー/貼り付け機能を無効にする実装方法を、ステップごとにわかりやすく解説します。 実装の仕組み EditText上でテキストを長押しすると、Androidは「ActionMode」と呼ばれる浮動ツールバーを表示し、そこからカット・コピー・ペースト

  2. Androidでコピー&ペーストを使う方法|テキスト・リンク・切り取り操作を徹底解説

    カット/コピー&ペーストを発明したラリー・テスラー氏に、世界は永遠に感謝すべきでしょう。シンプルでありながら不可欠なこの機能は、コンピューティングに欠かせない存在です。コピー&ペーストのないデジタルの世界など想像できません。同じメッセージを何度も入力するのはストレスですし、コピー&ペーストなしで複数のデジタルデータを作成するのはほぼ不可能でしょう。 時代とともに、スマートフォンは日常的なテキスト入力の主役となりました。そのため、AndroidやiOSなどモバイルOSにコピー&ペースト機能がなければ、日々の作業は成り立ちません。 本記事では、テキストをある場所から別の場所へコピー&ペーストするさ