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

KotlinでAndroidアプリにテキストのコピーや貼り付け機能を実装する方法

Kotlinを使用して、Androidアプリ内でテキストをプログラム的にコピー(Ctrl+C相当の処理)する方法を解説します。このチュートリアルでは、EditTextに入力されたテキストをクリップボードにコピーし、ボタン操作で別のTextViewに貼り付けるまでの一連の流れを、サンプルコード付きで順番に紹介していきます。

ポイント:ClipboardManagerとClipData

Androidでクリップボードを操作するには、システムサービスとして提供されているClipboardManagerを使用します。コピーしたいテキストはClipDataオブジェクトに格納し、setPrimaryClip()メソッドでクリップボードへ設定します。貼り付ける際は、primaryClipから取得したClipDataの先頭アイテムを読み出すだけでOKです。

実装手順

ステップ1:新規プロジェクトの作成

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

ステップ2:レイアウトファイル(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:gravity="center_horizontal"
   android:orientation="vertical"
   tools:context=".MainActivity">
<TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginTop="70dp"
   android:text="Tutorials Point"
   android:textAlignment="center"
   android:textColor="@android:color/holo_green_dark"
   android:textSize="32sp"
   android:textStyle="bold" />
<EditText
   android:id="@+id/editText"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_marginTop="100dp"
   android:hint="Enter your text" />
<Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginTop="5dp"
   android:onClick="copyText"
   android:text="Copy text" />
<Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginTop="5dp"
   android:onClick="pasteText"
   android:text="Paste text" />
<TextView
   android:textColor="@android:color/holo_red_dark"
   android:id="@+id/textView"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginTop="30dp"
   android:textSize="24sp"
   android:textStyle="bold" />
</LinearLayout>

ステップ3:MainActivity.ktの編集

src/MainActivity.ktに以下のコードを追加します。copyText()では入力されたテキストが空でないかをチェックしたうえでクリップボードにコピーし、pasteText()ではクリップボードの内容をTextViewに反映させています。

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
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
   lateinit var editText: EditText
   lateinit var textView: TextView
   lateinit var clipboardManager: ClipboardManager
   override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)
      title = "KotlinApp"
      editText = findViewById(R.id.editText)
      textView = findViewById(R.id.textView)
   }
   fun copyText(view: View) {
      val text = editText.text.toString()
      if (text.isNotEmpty()) {
         clipboardManager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
         val clipData = ClipData.newPlainText("key", text)
         clipboardManager.setPrimaryClip(clipData)
         Toast.makeText(applicationContext, "Copied", Toast.LENGTH_SHORT).show()
      } else {
         Toast.makeText(applicationContext, "No text to be copied", Toast.LENGTH_SHORT).show()
      }
   }
   fun pasteText(view: View) {
      val clipData: ClipData = clipboardManager.primaryClip!!
      val item: ClipData.Item = clipData.getItemAt(0)
      textView.text = item.text.toString()
      Toast.makeText(applicationContext, "Text is being Pasted", Toast.LENGTH_SHORT).show()
   }
}

ステップ4:AndroidManifest.xmlの確認

androidManifest.xmlに以下のコードを追加します。特別なパーミッションは不要で、通常のアクティビティ宣言のみで動作します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.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」アイコンをクリックします。表示された候補から接続済みのモバイルデバイスを選択すると、端末の画面にアプリが起動します。

テキストを入力して「Copy text」ボタンをタップするとクリップボードにコピーされ、「Paste text」ボタンをタップするとその内容が下のTextViewに表示されます。

KotlinでAndroidアプリにテキストのコピーや貼り付け機能を実装する方法

KotlinでAndroidアプリにテキストのコピーや貼り付け機能を実装する方法

  1. Androidアプリをプログラムで「再起動」する方法|AlarmManagerとPendingIntentの活用

    Androidアプリをプログラムで「再起動」するには? 設定変更の反映や状態の初期化など、アプリケーション全体をプログラムから再起動したい場面は意外と多くあります。本記事では、AlarmManagerとPendingIntentを組み合わせて、Androidアプリ全体をコードから「再起動」する方法を、サンプルコード付きで段階的に解説します。 手順1:Android Studioで新規プロジェクトを作成する まず、Android Studioのメニューから「File」→「New Project」を選択し、必要な情報をすべて入力して新しいプロジェクトを作成してください。 手順2:activity_

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

    この記事では、Androidアプリ内でテキストをプログラム的にクリップボードへコピーする(PCでいうCtrl+Cに相当する処理)方法を、実際のサンプルコードとともに解説します。 クリップボードを操作するには、Androidが標準で提供しているClipboardManagerクラスを使用します。本チュートリアルでは、EditTextに入力したテキストを「コピー」ボタンでクリップボードに保存し、「貼り付け」ボタンでTextViewに表示するシンプルなアプリを作成します。 実装手順 ステップ1:Android Studioで新規プロジェクトを作成する Android Studioを起動し、メニューか