当前位置:  开发笔记 > Android > 正文

如何在我的Android应用程序中以编程方式复制文本?

如何解决《如何在我的Android应用程序中以编程方式复制文本?》经验,为你挑选了7个好方法。

我正在构建一个Android应用程序,我想复制EditText小部件的文本值.用户可以按下Menu+A然后Menu+C复制该值,但我如何以编程方式执行此操作?



1> FlySwat..:

使用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参考


什么是`标签'?
使用`import android.content.ClipboardManager;`

2> Warpzit..:

所以每个人都同意如何做到这一点,但由于没有人想要提供完整的解决方案,这里有:

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);
}

我假设您在清单中声明了以下内容:



在方法@SuppressLint上添加以下3行({"NewApi","NewApi","NewApi","NewApi"}),@ SuppressWarnings("弃用"),@ TargetApi(11)........那就是我做的,而且有效.
您是否在清单中添加了目标和最小sdk?如果是,则禁用lint警告.
任何人都可以告诉我在`newPlainText`方法中究竟使用`label`是什么?documentaion陈述`标签剪辑数据的用户可见标签.但是什么时候`标签'对用户可见?我应该在`label`中加入什么样的价值/名称?

3> Viachaslau T..:

谷歌搜索带你到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



4> 小智..:
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());
}

你可以试试这个..



5> live-love..:

下面是一些从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());
        }
    }
}



6> Suragch..:
Android支持库更新

从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.如果您发现这种方式更具可读性,则可以检查每一个.



7> King of Mass..:

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

更改布局文件:将以下属性添加到TextView

android:textIsSelectable="true"

在你的Java类中写下这一行,用语法设置两行.

myTextView.setTextIsSelectable(true);

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

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有