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


当前回答

或者创建一个Kotlin扩展

 fun String.copyToClipboard(context: Context) {
     val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
     val clipData = ClipData.newPlainText("label",this)
     clipBoard.setPrimaryClip(clipData)
  }

然后调用

"stringToCopy".copyToClipboard(requireContext())

其他回答

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

所以每个人都同意应该怎么做,但由于没有人想要给出一个完整的解决方案,下面是:

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

我假设你在manifest中声明了如下内容:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />

对于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)

}

使用ClipboardManager#setPrimaryClip方法:

import android.content.ClipboardManager;

// ...

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

ClipboardManager API引用

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());
}

你可以试试这个。