我正在构建一个Android应用程序,我想复制EditText小部件的文本值。这是可能的用户按菜单+A然后菜单+C复制的值,但我如何通过编程做到这一点?


当前回答

对于Kotlin,在活动中使用下面的代码。

import android.content.ClipboardManager


 val clipBoard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
 val clipData = ClipData.newPlainText("label","Message to be Copied")
 clipBoard.setPrimaryClip(clipData)

其他回答

下面是一些代码,用于实现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());
        }
    }
}

我以kotlinish的方式使用这个(使用片段工作)

  private fun copyTextToClipboard(copyText: String) {

        val clipboardManager = requireActivity().
                               getSystemService(CLIPBOARD_SERVICE) as 
                                       android.content.ClipboardManager

        val clipData = ClipData.newPlainText("userLabel" ,copyText.trim())

        clipboardManager.setPrimaryClip(clipData)

    }

@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); 

标签是一个用户可见标签的剪辑数据和 文本是剪辑中的实际文本。根据官方文件。

使用这个导入是很重要的:

import android.content.ClipboardManager;

除非你的应用程序是默认的输入法编辑器(IME)或者是当前有焦点的应用程序,否则你的应用程序不能在Android 10或更高版本上访问剪贴板数据。 https://developer.android.com/about/versions/10/privacy/changes#clipboard-data

google带你到android.content.ClipboardManager,你可以决定,就像我做的那样,Clipboard在API < 11上是不可用的,因为文档页面说“Since: API Level 11”。

实际上有两个类,第二个类扩展了第一个类——android.text.ClipboardManager和android.content.ClipboardManager。

android.text.ClipboardManager从API 1开始就存在了,但它只适用于文本内容。

android.content.ClipboardManager是使用剪贴板的首选方式,但它在API级别< 11(蜂窝)上不可用。

要获得其中任何一个,你需要以下代码:

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

但对于API < 11,你必须导入android.text.ClipboardManager和API >= 11 android.content.ClipboardManager