Android Clipboard Text – Copy and Paste Android: Android provides a powerful clipboard-based framework for copying and pasting. It supports both simple and complex data types, including text strings, complex data structures, text and binary stream data, and even application assets.
Simple text data is stored directly in the clipboard and complex data is stored as a reference that the pasting application resolves with a content provider. Copying and pasting work both within an application and between applications that implement the framework.
In this tutorial, you will learn the following:
- Overview of Android Clipboard
- An Example of Android Clipboard – Copy and Paste Text in kotlin.
Android Clipboard Framework
The clip object can take one of three forms:
Text
newPlainText(label, text)
Returns a ClipData object whose single ClipData. Item object contains a text string.
URI
newUri(resolver, label, URI)
Returns a ClipData object whose single ClipData.Item object contains a URI.
Intent
newIntent(label, intent)
Returns a ClipData object whose single ClipData. Item object contains an Intent.
Some Important Points about Android clipboard
- The clipboard holds only one clip object at a time. When an application puts a clip object on the clipboard, the previous clip object disappears.
- If You want to allow paste data in your app, then you don’t need to handle all types of data. You can example the clipboard data, before giving an option to app users.
- Clip object also contains Metadata, which has what MIME type or types are available. This Metadata helps you handle data.
- If you have an application that primarily handles text, you may want to ignore clip objects that contain a URI or Intent.
Let’s Build Android Clipboard – Copy and Paste Text Example in Kotlin
In this tutorial, you will learn How to store simple text data in Clipboard and get the value.
Step 1. Create a new project “Build Your First Android App in Kotlin“
Step 2. In res layout file “activity_main.xml” – Add following code in the layout file
In the User interface using 2 Buttons – One button for copy, the text from EditText and another one paste the test in TextView.
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <EditText android:id="@+id/et_copy_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" android:ems="10" android:inputType="text" android:hint="Name" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/tv_text_paste" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="Hello World!" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/et_copy_text" /> <Button android:id="@+id/btn_copy" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:layout_marginStart="8dp" android:layout_marginTop="16dp" android:text="Copy" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_text_paste" android:onClick="copyText"/> <Button android:id="@+id/btn_paste" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginTop="16dp" android:text="Paste" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_text_paste" android:onClick="pasteText"/> </android.support.constraint.ConstraintLayout>
Step 3. Open the “MainActivity.kt” and add following code
Handling the action on click button methods which mentioned in the XML file and showing action information in TOAST.
package `in`.eyehunt.clipboardcopypastetext import android.support.v7.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.* import android.content.ClipData import android.content.ClipboardManager import android.view.View import android.widget.Toast class MainActivity : AppCompatActivity() { private var myClipboard: ClipboardManager? = null private var myClip: ClipData? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) myClipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager?; } // on click copy button fun copyText(view: View) { myClip = ClipData.newPlainText("text", et_copy_text.text); myClipboard?.setPrimaryClip(myClip); Toast.makeText(this, "Text Copied", Toast.LENGTH_SHORT).show(); } // on click paste button fun pasteText(view: View) { val abc = myClipboard?.getPrimaryClip() val item = abc?.getItemAt(0) tv_text_paste.text = item?.text.toString() Toast.makeText(applicationContext, "Text Pasted", Toast.LENGTH_SHORT).show() } }
Step 4. Now Run the application, in an emulator or On your Android device
Output screenshot Android Clipboard – Copy and Paste Text
Download source code Android Clipboard Text- Copy and Paste
https://github.com/EyeHunts/ClipboardCopyPasteText
Do comment if you have any doubt and suggestion on this tutorial.
Note: This example (Project) is developed in Android Studio 3.1.3. Tested on Android 9 ( Android-P), compile SDK version API 27: Android 8.0 (Oreo)
MinSdkVersion=”15″
TargetSdkVersion=”27″
Coding in Kotlin
how do i make it in a ‘val ’cause im having the same error?
What error are you getting?
This is exactly the thing I was looking for, thank you–it’s right at the level that I needed. One question:
this line:
myClipboard?.setPrimaryClip(myClip);
keeps giving me an error:
Smart cast to ‘ClipData!’ is impossible, because ‘myClip’ is a mutable property that could have been changed by this time
I’m new to Kotlin, so I’m curious why this error doesn’t happen for you, and what you think I might do to fix it?
Thanks!
Make “myClip” a val, which makes its reference final. Since it’s final, it can’t change it.