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"复制菜单项操作中设置要复制的剪贴板数据。

