Android TextView使用剪贴板复制粘贴
时间:2020-02-23 14:29:20 来源:igfitidea点击:
在本教程中,我们将在Android应用程序的TextView上实现复制粘贴功能。
在本文结尾,您可以将文本复制到Android系统的剪贴板中,然后粘贴该剪贴板数据。
Andorid剪贴板–复制粘贴
您必须已经注意到EditText具有内置的Clipboard Manager用于复制粘贴功能。
但是TextView没有。
因此,为了允许复制粘贴TextView,我们需要注册ContextMenu。
因此,为了接收菜单事件,我们需要registerForContextMenu
。
完成此操作后,您可以长按" TextView"以显示菜单。
菜单是在onCreateContextMenu()方法中创建的。
菜单项动作是在onContextItemSelected方法中设置的。
将文本复制到剪贴板
将TextView文本复制到剪贴板很容易。
您只需要将ClipData类型设置为newPlainText
并传递字符串即可。
例:
ClipboardManager manager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); ClipData clipData = ClipData.newPlainText("text", textView.getText()); manager.setPrimaryClip(clipData);
将文本粘贴到剪贴板
现在,您已将文本复制到剪贴板上,只需使用以下代码将其粘贴:
ClipData pasteData = manager.getPrimaryClip(); ClipData.Item item = pasteData.getItemAt(0); String paste = item.getText().toString();
其中我们粘贴剪贴板中的第一个数据。
如果我们有多个复制的文本,则可以使用pasteData.getItemAt(1)
等进行粘贴。
现在,让我们跳到本文的实现部分。
在下一节中,我们将开发一个简单的Android应用程序,您可以其中将文本从一个TextView复制粘贴到另一个。
代码
下面给出了" activity_main.xml"布局的代码:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/tvCopy" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Welcome To theitroad.local" android:padding="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" <TextView android:id="@+id/tvPaste" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Paste here" android:padding="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvCopy" </androidx.constraintlayout.widget.ConstraintLayout>
下面给出了MainActivity.java类的代码:
package com.theitroad.androidtextviewcopypaste; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.content.ClipData; import android.content.ClipboardManager; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { TextView tvCopy, tvPaste; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvCopy = findViewById(R.id.tvCopy); tvPaste = findViewById(R.id.tvPaste); registerForContextMenu(tvCopy); registerForContextMenu(tvPaste); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("Options"); switch (v.getId()) { case R.id.tvCopy: menu.add(0, v.getId(), 0, "Copy"); TextView textView = (TextView) v; ClipboardManager manager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); ClipData clipData = ClipData.newPlainText("text", textView.getText()); if (manager != null) { manager.setPrimaryClip(clipData); } break; case R.id.tvPaste: menu.add(0, v.getId(), 0, "Paste"); break; } } @Override public boolean onContextItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.tvCopy: Toast.makeText(getApplicationContext(), "Copy Clicked", Toast.LENGTH_LONG).show(); break; case R.id.tvPaste: ClipboardManager manager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); if (manager != null && manager.getPrimaryClip() != null && manager.getPrimaryClip().getItemCount() > 0) { tvPaste.setText(manager.getPrimaryClip().getItemAt(0).getText().toString()); } break; } return super.onContextItemSelected(item); } }
getItemCount()用于获取剪贴板中存在的项目。
您还可以在" onContextItemSelected"复制菜单项操作中设置要复制的剪贴板数据。