我正在构建一个Android应用程序,我想复制EditText小部件的文本值。这是可能的用户按菜单+A然后菜单+C复制的值,但我如何通过编程做到这一点?
当前回答
@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;
其他回答
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引用
或者创建一个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())
我以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)
}
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;
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 碎片中的onCreateOptionsMenu
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- DSL元素android.dataBinding。enabled'已过时,已被'android.buildFeatures.dataBinding'取代
- ConstraintLayout:以编程方式更改约束
- PANIC: AVD系统路径损坏。检查ANDROID_SDK_ROOT值
- 如何生成字符串类型的buildConfigField
- Recyclerview不调用onCreateViewHolder
- Android API 21工具栏填充
- Android L中不支持操作栏导航模式
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用
- 在Android Studio中创建aar文件