Skip to main content
PCSalt
YouTube GitHub
Back to Android
Android (Updated: ) · 1 min read

Copy to Clipboard Programmatically

Copy text to clipboard and paste from clipboard programmatically in Android using ClipboardManager and ClipData.


Android’s ClipboardManager lets you copy text (or other content) to the system clipboard and read it back. It’s useful for copy buttons, sharing text, or any feature where the user needs to reuse content.

Copy Text to Clipboard

val clipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("label", "Text to copy")
clipboard.setPrimaryClip(clip)

That’s it — three lines. The label parameter is a user-visible label for the clip (most apps just pass a descriptive string).

Paste from Clipboard

val clipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
val clip = clipboard.primaryClip

if (clip != null && clip.itemCount > 0) {
  val pastedText = clip.getItemAt(0).text.toString()
  // use pastedText
}

Always check for null and itemCount — the clipboard might be empty.

Complete Example

A simple app with an EditText, Copy button, Paste button, and a TextView to display pasted content.

MainActivity.kt

package com.pcsalt.example.clipboardmanager

import android.content.ClipData
import android.content.ClipboardManager
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.pcsalt.example.clipboardmanager.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

  private lateinit var binding: ActivityMainBinding

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    val clipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager

    binding.btnCopy.setOnClickListener {
      val text = binding.etInput.text.toString().trim()
      if (text.isEmpty()) {
        binding.etInput.error = "Enter text to copy"
        return@setOnClickListener
      }
      val clip = ClipData.newPlainText("copied_text", text)
      clipboard.setPrimaryClip(clip)
      Toast.makeText(this, "Copied to clipboard", Toast.LENGTH_SHORT).show()
    }

    binding.btnPaste.setOnClickListener {
      val clip = clipboard.primaryClip
      if (clip != null && clip.itemCount > 0) {
        val pastedText = clip.getItemAt(0).text.toString()
        binding.tvPastedText.text = pastedText
      } else {
        Toast.makeText(this, "Clipboard is empty", Toast.LENGTH_SHORT).show()
      }
    }
  }
}

Layout — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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">

    <EditText
        android:id="@+id/etInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter text to copy"
        android:inputType="text" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btnCopy"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginEnd="4dp"
            android:text="Copy" />

        <Button
            android:id="@+id/btnPaste"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginStart="4dp"
            android:text="Paste" />
    </LinearLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Pasted text"
        android:textAppearance="?attr/textAppearanceTitleMedium" />

    <TextView
        android:id="@+id/tvPastedText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:textAppearance="?attr/textAppearanceBodyLarge" />
</LinearLayout>

Other ClipData Types

ClipData supports more than plain text:

// URI (e.g., content provider URI)
val clip = ClipData.newUri(contentResolver, "label", uri)

// Intent
val clip = ClipData.newIntent("label", intent)

// HTML text
val clip = ClipData.newHtmlText("label", "plain text fallback", "<b>HTML</b>")

Download Source Code

View on GitHub krrishnaaaa/ClipboardManager