我正在构建一个Android应用程序,我想复制EditText小部件的文本值.用户可以按下Menu+A
然后Menu+C
复制该值,但我如何以编程方式执行此操作?
使用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参考
所以每个人都同意如何做到这一点,但由于没有人想要提供完整的解决方案,这里有:
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); }
我假设您在清单中声明了以下内容:
谷歌搜索带你到android.content.ClipboardManager,你可以像我一样决定,剪贴板在API <11时不可用,因为文档页面显示"自:API级别11".
实际上有两个类,第二个扩展第一个类 - android.text.ClipboardManager和android.content.ClipboardManager.
android.text.ClipboardManager自API 1起存在,但它仅适用于文本内容.
android.content.ClipboardManager是使用剪贴板的首选方式,但它在API Level <11(Honeycomb)上不可用.
要获得其中任何一个,您需要以下代码:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
但是对于API <11,您必须导入android.text.ClipboardManager
并且API> = 11 android.content.ClipboardManager
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()); }
你可以试试这个..
下面是一些从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()); } } }
从Android Oreo开始,支持库仅限于API 14.大多数较新的应用程序可能还具有14的最小API,因此无需担心其他一些答案中提到的API 11的问题.很多代码都可以清理干净.(但如果您仍在支持较低版本,请参阅我的编辑历史记录.)
复制ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("label", selectedText); if (clipboard == 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块来获取粘贴文本,因为可以有多个东西null
.如果您发现这种方式更具可读性,则可以检查每一个.
要为TextView启用标准复制/粘贴,U可以选择以下选项之一:
更改布局文件:将以下属性添加到TextView
android:textIsSelectable="true"
在你的Java类中写下这一行,用语法设置两行.
myTextView.setTextIsSelectable(true);
长按TextView,您可以看到复制/粘贴操作栏.