如何在我的Android应用程序中以编程方式复制文本?
我正在构建一个Android应用程序,我想复制EditText小部件的文本值。用户可以按如何在我的Android应用程序中以编程方式复制文本?,android,menu,clipboardmanager,Android,Menu,Clipboardmanager,我正在构建一个Android应用程序,我想复制EditText小部件的文本值。用户可以按Menu+A然后按Menu+C复制值,但我如何以编程方式执行此操作?使用方法: 你可以试试这个..谷歌搜索将你带到android.content.ClipboardManager,你可以像我一样决定剪贴板在API
Menu+A
然后按Menu+C
复制值,但我如何以编程方式执行此操作?使用方法:
你可以试试这个..谷歌搜索将你带到android.content.ClipboardManager,你可以像我一样决定剪贴板在API<11上不可用,因为文档页面上写着“自:API级别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>=11android.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);
}
intsdk=android.os.Build.VERSION.sdk\u int;
如果(sdk
我假设您在清单中声明了如下内容:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
以下是一些代码,用于从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());
}
}
}
公共作废副本(视图v){
int startSelection=txtNotes.getSelectionStart();
int endSelection=txtNotes.getSelectionEnd();
if((txtNotes.getText()!=null)&&(endSelection>startSelection))
{
String selectedText=txtNotes.getText().toString().substring(开始选择,结束选择);
int sdk=android.os.Build.VERSION.sdk\u int;
如果(sdk
要启用TextView的标准复制/粘贴,您可以选择以下选项之一:
布局文件中的更改:将以下属性添加到TextView
android:textIsSelectable="true"
在Java类中,编写这行代码,按语法设置两个
myTextView.setTextIsSelectable(true)代码>
长按文本视图可以看到复制/粘贴操作栏。Android支持库更新
从AndroidOreo开始,支持库只支持API 14。大多数较新的应用程序的最小API可能也为14,因此不需要担心其他一些答案中提到的API 11的问题。很多代码都可以清理。(但如果仍支持较低版本,请查看我的编辑历史记录。)
复制
粘贴
我添加这段代码作为奖励,因为复制/粘贴通常是成对完成的
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
。如果你觉得这样更可读,你可以检查每一个李>
@FlySwat已经给出了正确的答案,我只是在分享完整的答案:
使用ClipboardManager.setPrimaryClip()方法:
其中,
label
是剪辑数据的用户可见标签,并且
text
是剪辑中的实际文本。根据
使用此导入非常重要:
import android.content.ClipboardManager;
和导入导入android.content.ClipboardManager代码>这是我的工作代码
/**
* Method to code text in clip board
*
* @param context context
* @param text text what wan to copy in clipboard
* @param label label what want to copied
*/
public static void copyCodeInClipBoard(Context context, String text, String label) {
if (context != null) {
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(label, text);
if (clipboard == null || clip == null)
return;
clipboard.setPrimaryClip(clip);
}
}
对于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)
}
除非您的应用程序是默认输入法编辑器(IME)或当前具有焦点的应用程序,否则您的应用程序无法访问Android 10或更高版本上的剪贴板数据。
对于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)
剪贴簿管理员。这基本上是一个重复的问题:它不工作,因为编译器抛出了一个错误:callrequi
import android.content.ClipboardManager;
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
if (clipboard == null || clip == null)
return;
clipboard.setPrimaryClip(clip);
/**
* Method to code text in clip board
*
* @param context context
* @param text text what wan to copy in clipboard
* @param label label what want to copied
*/
public static void copyCodeInClipBoard(Context context, String text, String label) {
if (context != null) {
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(label, text);
if (clipboard == null || clip == null)
return;
clipboard.setPrimaryClip(clip);
}
}
fun copyToClipBoard(context: Context, message: String) {
val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("label",message)
clipBoard.setPrimaryClip(clipData)
}
import android.content.ClipboardManager
val clipBoard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("label","Message to be Copied")
clipBoard.setPrimaryClip(clipData)