我正在构建一个Android应用程序,我想复制EditText小部件的文本值。这是可能的用户按菜单+A然后菜单+C复制的值,但我如何通过编程做到这一点?
当前回答
我以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)
}
其他回答
Android支持库更新
从Android Oreo开始,支持库只到API 14。大多数新应用程序的最小API也可能是14,因此不需要担心其他一些答案中提到的API 11的问题。很多代码都可以被清理。(但如果你仍然支持低版本,请查看我的编辑历史。)
Copy
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()获取服务。 我使用了一个try/catch块来获取粘贴文本,因为多个东西可以为空。如果您觉得这样可读性更好,可以逐个检查。
使用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引用
我以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)
}
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());
}
你可以试试这个。
除非你的应用程序是默认的输入法编辑器(IME)或者是当前有焦点的应用程序,否则你的应用程序不能在Android 10或更高版本上访问剪贴板数据。 https://developer.android.com/about/versions/10/privacy/changes#clipboard-data
推荐文章
- apk (.apk)和应用程序包(.aab)的区别
- 如何设置超时在改造库?
- Android - SPAN_EXCLUSIVE_EXCLUSIVE跨度不能为零长度
- TextView的字体大小在Android应用程序改变字体大小从本机设置
- 如何模拟Android杀死我的进程
- 禁用EditText闪烁光标
- Android Eclipse -无法找到*.apk
- 设置TextView文本从html格式的字符串资源在XML
- 如何允许所有网络连接类型HTTP和HTTPS在Android(9)馅饼?
- Android加载JS包失败
- Android Studio, logcat在应用程序关闭后清理
- 在android中从上下文获取活动
- 无法解析主机"<URL here>"没有与主机名关联的地址
- getActivity()在Fragment函数中返回null
- 按钮背景是透明的