我正在构建一个Android应用程序,并且想要复制EditText小部件的文本值。用户可以按Menu+A
然后Menu+C
复制该值,但是我将如何以编程方式执行此操作?
我正在构建一个Android应用程序,并且想要复制EditText小部件的文本值。用户可以按Menu+A
然后Menu+C
复制该值,但是我将如何以编程方式执行此操作?
Answers:
使用ClipboardManager#setPrimaryClip
方法:
import android.content.ClipboardManager;
// ...
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
import android.content.ClipboardManager;
label
啊
Context context = getApplicationContext(); Toast.makeText(context, "text copied", Toast.LENGTH_LONG).show();
因此,每个人都同意应如何完成此工作,但是由于没人愿意提供完整的解决方案,因此请按以下步骤进行:
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText("text to clip");
} else {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText("text label","text to clip");
clipboard.setPrimaryClip(clip);
}
我假设您在清单中声明了以下内容:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
label
in newPlainText
方法的确切用途?文件记载label User-visible label for the clip data.
。但是什么时候label
对用户可见?我应该输入哪种值/名称label
?
Googling将您带到android.content.ClipboardManager,您可以像我一样决定在API <11上不提供剪贴板,因为文档页面显示“ Since:API Level 11”。
实际上有两个类,第二个扩展了第一个类-android.text.ClipboardManager和android.content.ClipboardManager。
android.text.ClipboardManager自API 1起就存在,但仅适用于文本内容。
android.content.ClipboardManager是使用剪贴板的首选方式,但在API级别<11(Honeycomb)上不可用。
要获得它们中的任何一个,您需要以下代码:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
但是对于API <11,您必须导入android.text.ClipboardManager
,对于API> = 11 android.content.ClipboardManager
public void onClick (View v)
{
switch (v.getId())
{
case R.id.ButtonCopy:
copyToClipBoard();
break;
case R.id.ButtonPaste:
pasteFromClipBoard();
break;
default:
Log.d(TAG, "OnClick: Unknown View Received!");
break;
}
}
// Copy EditCopy text to the ClipBoard
private void copyToClipBoard()
{
ClipboardManager clipMan = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipMan.setPrimaryClip(editCopy.getText());
}
你可以试试这个
这是一些代码,用于实现EditText的某些复制和粘贴功能(感谢Warpzit进行版本检查)。您可以将它们挂接到按钮的onclick事件上。
public void copy(View v) {
int startSelection = txtNotes.getSelectionStart();
int endSelection = txtNotes.getSelectionEnd();
if ((txtNotes.getText() != null) && (endSelection > startSelection ))
{
String selectedText = txtNotes.getText().toString().substring(startSelection, endSelection);
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(selectedText);
} else {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText("WordKeeper",selectedText);
clipboard.setPrimaryClip(clip);
}
}
}
public void paste(View v) {
int sdk = android.os.Build.VERSION.SDK_INT;
if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard.getText() != null) {
txtNotes.getText().insert(txtNotes.getSelectionStart(), clipboard.getText());
}
} else {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
if (item.getText() != null) {
txtNotes.getText().insert(txtNotes.getSelectionStart(), item.getText());
}
}
}
从Android Oreo开始,支持库仅涉及API14。大多数较新的应用程序的最低API可能也为14,因此无需担心其他一些答案中提到的API 11的问题。许多代码可以清除。(但是,如果您仍支持较低版本,请查看我的编辑历史记录。)
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", selectedText);
if (clipboard == null || clip == null) return;
clipboard.setPrimaryClip(clip);
我将此代码作为奖励添加,因为复制/粘贴通常成对完成。
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
try {
CharSequence text = clipboard.getPrimaryClip().getItemAt(0).getText();
} catch (Exception e) {
return;
}
android.content.ClipboardManager
版本而不是旧版本android.text.ClipboardManager
。相同的ClipData
。context.getSystemService()
。null
。如果您发现每种方法更具可读性,则可以进行检查。@FlySwat已经给出了正确的答案,我只是分享完整的答案:
使用ClipboardManager.setPrimaryClip(http://developer.android.com/reference/android/content/ClipboardManager.html)方法:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
其中label
是剪辑数据的用户可见标签,并且text
是剪辑
中的实际文本。根据官方文件。
使用此导入很重要:
import android.content.ClipboardManager;
这是我的工作代码
/**
* Method to code text in clip board
*
* @param context context
* @param text text what wan to copy in clipboard
* @param label label what want to copied
*/
public static void copyCodeInClipBoard(Context context, String text, String label) {
if (context != null) {
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(label, text);
if (clipboard == null || clip == null)
return;
clipboard.setPrimaryClip(clip);
}
}
对于Kotlin,我们可以使用以下方法。您可以将此方法粘贴到活动或片段中。
fun copyToClipBoard(context: Context, message: String) {
val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("label",message)
clipBoard.setPrimaryClip(clipData)
}
context.
是我缺少的部分-可能是因为我在一个片段中这样做。