Android: portapapeles
Android proporciona el marco del portapapeles para copiar y pegar diferentes tipos de datos. Los datos pueden ser texto, imágenes, datos de flujo binario u otros tipos de datos complejos.
Android proporciona la biblioteca de ClipboardManager y ClipData y ClipData.item para usar el marco de copia y pegado. Para usar el marco del portapapeles, debe colocar los datos en el objeto de clip y luego colocar ese objeto en el portapapeles de todo el sistema.
Para utilizar el portapapeles, debe crear una instancia de un objeto de ClipboardManager llamando al getSystemService()método. Su sintaxis se da a continuación:
ClipboardManager myClipboard;
myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
Copiar datos
Lo siguiente que debe hacer es crear una instancia del objeto ClipData llamando al tipo respectivo de método de datos de la clase ClipData. En caso de datos de texto, elnewPlainTextse llamará al método. Después de eso, debe establecer esos datos como el clip del objeto Administrador del portapapeles.Su sintaxis se proporciona a continuación:
ClipData myClip;
String text = "hello world";
myClip = ClipData.newPlainText("text", text);
myClipboard.setPrimaryClip(myClip);
El objeto ClipData puede tomar estas tres formas y las siguientes funciones se utilizan para crear esas formas.
No Señor | Forma y método ClipData |
---|---|
1 |
Text newPlainText (etiqueta, texto) Devuelve un objeto ClipData cuyo único objeto ClipData.Item contiene una cadena de texto. |
2 |
URI newUri (resolver, etiqueta, URI) Devuelve un objeto ClipData cuyo único objeto ClipData.Item contiene un URI. |
3 |
Intent newIntent (etiqueta, intención) Devuelve un objeto ClipData cuyo único objeto ClipData.Item contiene un Intent. |
Pegar datos
Para pegar los datos, primero obtendremos el clip llamando al getPrimaryClip()método. Y a partir de ese clic obtendremos el elemento en el objeto ClipData.Item. Y del objeto obtendremos los datos. Su sintaxis se da a continuación:
ClipData abc = myClipboard.getPrimaryClip();
ClipData.Item item = abc.getItemAt(0);
String text = item.getText().toString();
Aparte de estos métodos, hay otros métodos proporcionados por la clase ClipboardManager para administrar el marco del portapapeles. Estos métodos se enumeran a continuación:
No Señor | Método y descripción |
---|---|
1 |
getPrimaryClip() Este método solo devuelve el clip principal actual en el portapapeles |
2 |
getPrimaryClipDescription() Este método devuelve una descripción del clip principal actual en el portapapeles, pero no una copia de sus datos. |
3 |
hasPrimaryClip() Este método devuelve verdadero si actualmente hay un clip principal en el portapapeles |
4 |
setPrimaryClip(ClipData clip) Este método establece el clip principal actual en el portapapeles |
5 |
setText(CharSequence text) Este método se puede utilizar directamente para copiar texto en el portapapeles. |
6 |
getText() Este método se puede utilizar directamente para obtener el texto copiado del portapapeles |
Ejemplo
Aquí hay un ejemplo que demuestra el uso de la clase ClipboardManager. Crea una aplicación básica de copiar y pegar que le permite copiar el texto y luego pegarlo a través del portapapeles.
Para experimentar con este ejemplo, puede ejecutarlo en un dispositivo real o en un emulador.
Pasos | Descripción |
---|---|
1 | Utilizará Android Studio IDE para crear una aplicación de Android y bajo un paquete com.example.sairamkrishna.myapplication. |
2 | Modifique el archivo src / MainActivity.java para agregar el código necesario. |
3 | Modifique res / layout / activity_main para agregar los componentes XML respectivos |
4 | Ejecute la aplicación y elija un dispositivo Android en ejecución e instale la aplicación en él y verifique los resultados |
A continuación se muestra el contenido del archivo de actividad principal modificado src/MainActivity.java.
package com.example.sairamkrishna.myapplication;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
EditText ed1, ed2;
Button b1, b2;
private ClipboardManager myClipboard;
private ClipData myClip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed1 = (EditText) findViewById(R.id.editText);
ed2 = (EditText) findViewById(R.id.editText2);
b1 = (Button) findViewById(R.id.button);
b2 = (Button) findViewById(R.id.button2);
myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text;
text = ed1.getText().toString();
myClip = ClipData.newPlainText("text", text);
myClipboard.setPrimaryClip(myClip);
Toast.makeText(getApplicationContext(), "Text Copied",
Toast.LENGTH_SHORT).show();
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ClipData abc = myClipboard.getPrimaryClip();
ClipData.Item item = abc.getItemAt(0);
String text = item.getText().toString();
ed2.setText(text);
Toast.makeText(getApplicationContext(), "Text Pasted",
Toast.LENGTH_SHORT).show();
}
});
}
}
A continuación se muestra el contenido modificado del xml res/layout/activity_main.xml.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView android:text="Example" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview"
android:textSize="35dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point"
android:id="@+id/textView"
android:layout_below="@+id/textview"
android:layout_centerHorizontal="true"
android:textColor="#ff7aff24"
android:textSize="35dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:src="@drawable/abc"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:hint="Copy text"
android:layout_below="@+id/imageView"
android:layout_alignLeft="@+id/imageView"
android:layout_alignStart="@+id/imageView" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:layout_alignLeft="@+id/editText"
android:layout_alignStart="@+id/editText"
android:hint="paste text"
android:layout_below="@+id/editText"
android:layout_alignRight="@+id/editText"
android:layout_alignEnd="@+id/editText" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Copy text"
android:id="@+id/button"
android:layout_below="@+id/editText2"
android:layout_alignLeft="@+id/editText2"
android:layout_alignStart="@+id/editText2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Paste text"
android:id="@+id/button2"
android:layout_below="@+id/editText2"
android:layout_alignRight="@+id/editText2"
android:layout_alignEnd="@+id/editText2" />
</RelativeLayout>
A continuación se muestra el contenido de la res/values/string.xml.
<resources>
<string name="app_name">My Application</string>
</resources>
A continuación se muestra el contenido de AndroidManifest.xml archivo.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sairamkrishna.myapplication" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.sairamkrishna.myapplication.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Intentemos ejecutar nuestra aplicación que acabamos de modificar. Supongo que habías creado tuAVDmientras realiza la configuración del entorno. Para ejecutar la aplicación desde Android Studio, abra uno de los archivos de actividad de su proyecto y haga clic en el
Ahora simplemente ingrese cualquier texto en el campo Texto para copiar y luego seleccione el botón Copiar texto. Se mostrará la siguiente notificación que se muestra a continuación:
Ahora simplemente presione el botón de pegar y verá que el texto que se copia ahora se pega en el campo de Texto copiado. Se muestra a continuación: