当前位置:   article > 正文

安卓:实现复制粘贴功能_android 复制到剪贴板

android 复制到剪贴板

目录

一、介绍

(一)ClipboardManager介绍

1、ClipboardManager常用方法:

2、获取 ClipboardManager实例

(二)、ClipData介绍

1、创建ClipData对象:

2、获取ClipData的信息:

3、ClipData.Item对象:

二、 例子

复制粘贴的辅助类ClipboardHelper : 

 MainActivity:

 activity_main:

 运行结果:


一、介绍

(一)ClipboardManager介绍

    ClipboardManagerAndroid提供的一个系统服务,用于管理剪贴板内容。它允许您在应用程序之间复制和粘贴文本、链接、图像等数据。

1、ClipboardManager常用方法:

  • setPrimaryClip(ClipData clip):将指定的ClipData对象设置为主要剪贴板内容。这可以用于复制文本、链接、图像等到剪贴板。
  1. ClipData clipData = ClipData.newPlainText("label", "要复制的文本");
  2. clipboardManager.setPrimaryClip(clipData);
  • getPrimaryClip():获取主要剪贴板的内容。返回一个ClipData对象,其中包含主要剪贴板中的数据。
  1. ClipData clipData = clipboardManager.getPrimaryClip();
  2. if (clipData != null && clipData.getItemCount() > 0) {
  3. // 处理剪贴板内容
  4. }
  • hasPrimaryClip():检查主要剪贴板是否有内容。如果剪贴板包含了数据,则返回true,否则返回false
  1. if (clipboardManager.hasPrimaryClip()) {
  2. ClipData clipData = clipboardManager.getPrimaryClip();
  3. if (clipData != null && clipData.getItemCount() > 0) {
  4. CharSequence text = clipData.getItemAt(0).getText();
  5. // 使用获取到的文本进行操作
  6. }
  7. }
  • addPrimaryClipChangedListener(OnPrimaryClipChangedListener listener):注册一个剪贴板变化的监听器,以便在剪贴板内容发生变化时接收通知。
  1. clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
  2. @Override
  3. public void onPrimaryClipChanged() {
  4. // 剪贴板内容发生变化时执行相关操作
  5. }
  6. });

2、获取 ClipboardManager实例

ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);

(二)、ClipData介绍

         ClipData是Android中用于在剪贴板中存储数据的类。它是一个不可变的数据容器,可以包含一个或多个ClipData.Item对象,每个对象代表一项剪贴板内容。

1、创建ClipData对象:

可以使用ClipData类的静态方法newPlainText()newUri()来创建一个新的ClipData对象。

  • newPlainText(CharSequence label, CharSequence text):创建一个纯文本的ClipData对象。需要提供标签(label)和要复制到剪贴板的文本内容(text)。
  1. CharSequence label = "Label";
  2. CharSequence text = "要复制的文本";
  3. ClipData clipData = ClipData.newPlainText(label, text);
  • newUri(ContentResolver resolver, CharSequence label, Uri uri):创建一个包含URI的ClipData对象。需要提供标签(label)、内容解析器(ContentResolver)以及要复制到剪贴板的URI。
  1. CharSequence label = "Label";
  2. Uri uri = Uri.parse("https://example.com");
  3. ClipData clipData = ClipData.newUri(getContentResolver(), label, uri);

2、获取ClipData的信息:

         ClipData对象包含了剪贴板中的数据。您可以使用以下方法来访问和操作ClipData的内容:

  • getItemCount()获取ClipData中包含的项(ClipData.Item)的数量。
int itemCount = clipData.getItemCount();
  • getItemAt(int index):获取在指定索引处的ClipData.Item
ClipData.Item item = clipData.getItemAt(index);

3、ClipData.Item对象:

    ClipData.Item表示剪贴板中的一个项,可以是文本、链接或其他数据。通过ClipData的方法,您可以访问和操作每个Item对象: 

  • getText():获取ClipData.Item中的文本内容。
CharSequence text = item.getText();
  • getUri():获取ClipData.Item中的URI。
Uri uri = item.getUri();

二、 例子

复制粘贴的辅助类ClipboardHelper : 

  1. package com.example.stardemo;
  2. import android.content.ClipData;
  3. import android.content.ClipboardManager;
  4. import android.content.Context;
  5. public class ClipboardHelper {
  6. private Context context;
  7. private ClipboardManager clipboardManager;
  8. public ClipboardHelper(Context context) {
  9. this.context = context;
  10. clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
  11. }
  12. /**
  13. * 将文本复制到剪贴板
  14. *
  15. * @param text 要复制的文本
  16. */
  17. public void copyText(String text) {
  18. ClipData clipData = ClipData.newPlainText("text", text);
  19. clipboardManager.setPrimaryClip(clipData);
  20. }
  21. /**
  22. * 从剪贴板获取文本
  23. *
  24. * @return 剪贴板中的文本
  25. */
  26. public String getCopiedText() {
  27. if (clipboardManager.hasPrimaryClip()) {
  28. ClipData clipData = clipboardManager.getPrimaryClip();
  29. if (clipData != null && clipData.getItemCount() > 0) {
  30. CharSequence text = clipData.getItemAt(0).getText();
  31. return text.toString();
  32. }
  33. }
  34. return null;
  35. }
  36. }

 MainActivity:

  1. package com.example.stardemo;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.TextView;
  6. import android.widget.Toast;
  7. public class MainActivity extends AppCompatActivity {
  8. TextView copeText,pasteText;
  9. ClipboardHelper mClipboardHelper;
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. copeText = findViewById(R.id.copyText);
  15. pasteText = findViewById(R.id.pasteText);
  16. mClipboardHelper = new ClipboardHelper(this);
  17. copeText.setOnClickListener(new View.OnClickListener() {
  18. @Override
  19. public void onClick(View v) {
  20. mClipboardHelper.copyText(copeText.getText().toString());
  21. Toast.makeText(MainActivity.this, "复制成功", Toast.LENGTH_SHORT).show();
  22. }
  23. });
  24. pasteText.setOnClickListener(new View.OnClickListener() {
  25. @Override
  26. public void onClick(View v) {
  27. pasteText.setText(mClipboardHelper.getCopiedText());
  28. Toast.makeText(MainActivity.this, "粘贴成功", Toast.LENGTH_SHORT).show();
  29. }
  30. });
  31. }
  32. }

            其中包含两个TextViewcopyTextpasteText。在点击copyText时,它将使用ClipboardHelper类将文本复制到剪贴板中,并显示一个Toast消息表示复制成功。在点击pasteText时,它将从剪贴板中获取已复制的文本并设置为pasteText的文本。 

 activity_main:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".MainActivity">
  8. <TextView
  9. android:id="@+id/copyText"
  10. android:layout_width="115dp"
  11. android:layout_height="100dp"
  12. android:gravity="center"
  13. android:text="Hello World!"
  14. android:textSize="18sp"
  15. app:layout_constraintBottom_toBottomOf="parent"
  16. app:layout_constraintEnd_toEndOf="parent"
  17. app:layout_constraintStart_toStartOf="parent"
  18. app:layout_constraintTop_toTopOf="parent"
  19. android:textColor="@color/black"
  20. app:layout_constraintVertical_bias="0.234" />
  21. <TextView
  22. android:id="@+id/pasteText"
  23. android:background="@color/teal_200"
  24. android:textColor="@color/black"
  25. android:layout_width="115dp"
  26. android:layout_height="100dp"
  27. android:gravity="center"
  28. android:textSize="18sp"
  29. app:layout_constraintBottom_toBottomOf="parent"
  30. app:layout_constraintEnd_toEndOf="parent"
  31. app:layout_constraintStart_toStartOf="parent"
  32. app:layout_constraintTop_toTopOf="parent"
  33. app:layout_constraintVertical_bias="0.551" />
  34. </androidx.constraintlayout.widget.ConstraintLayout>

 运行结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/558413
推荐阅读
相关标签
  

闽ICP备14008679号