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


当前回答

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

其他回答

要启用TextView的标准复制/粘贴,U可以选择以下选项之一:

在布局文件的变化:添加以下属性到你的TextView

android:textIsSelectable="true"

在Java类中,按照语法编写第二行。

myTextView.setTextIsSelectable(真正的);

长按TextView,你可以看到复制/粘贴操作栏。

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

然后导入android。content。clipboardmanager;

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

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

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,在活动中使用下面的代码。

import android.content.ClipboardManager


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