如何在Android中为TextView启用标准复制粘贴?

如何在Android中为TextView启用标准复制粘贴?,android,textview,copy-paste,Android,Textview,Copy Paste,我想为TextView启用标准复制粘贴(与EditText相同)。我怎么做 我尝试使用不可编辑的EditText,但效果不好(有时它会变成可编辑的,或者没有显示复制粘贴覆盖)。一般来说,这可能不是一个好方法 需要从API 7开始的工作解决方案。尝试 i、 例如,android:textIsSelectable=“true”这适用于复制前蜂窝: import android.text.ClipboardManager; textView.setOnClickListener(new View.O

我想为TextView启用标准复制粘贴(与EditText相同)。我怎么做

我尝试使用不可编辑的EditText,但效果不好(有时它会变成可编辑的,或者没有显示复制粘贴覆盖)。一般来说,这可能不是一个好方法

需要从API 7开始的工作解决方案。

尝试


i、 例如,
android:textIsSelectable=“true”
这适用于复制前蜂窝:

import android.text.ClipboardManager;

textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        ClipboardManager cm = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
        cm.setText(textView.getText());
        Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show();
    }
});

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

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

    android:textIsSelectable=“true”

  • 在Java类中,编写这一行以编程方式进行设置<代码>myTextView.setTextIsSelectable(true)

  • 长按文本视图可以看到复制/粘贴操作栏

    ,更新了代码,以前的方法已弃用

    不带操作栏的主题全屏解决方案
    ActionBar

    扩展
    TextView
    并在构造函数中粘贴以下代码

    this.setOnLongClickListener(new OnLongClickListener() {
    
                @Override
                public boolean onLongClick(View v) {
                    ClipboardManager cManager = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
                    ClipData cData = ClipData.newPlainText("text", getText());
                    cManager.setPrimaryClip(cData);
                    Util.toast(mContext, string.text_copyed);
                    return true;
                }
            });
    

    对于
    编辑文本
    , 在活动内部的清单中使用 android:WindowsOfInputMode=“adjustResize”

  • 使用主题

    @android:style/Theme.Black.NoTitleBar.Fullscreen
    

  • 在xml中设置TextView

    android:textIsSelectable="true"
    
  • 最好是:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    final android.content.ClipboardManager clipboardManager = (android.content.ClipboardManager) context
            .getSystemService(Context.CLIPBOARD_SERVICE);
    final android.content.ClipData clipData = android.content.ClipData
            .newPlainText("text label", "text to clip");
    clipboardManager.setPrimaryClip(clipData);
    } else {
    final android.text.ClipboardManager clipboardManager = (android.text.ClipboardManager) context
            .getSystemService(Context.CLIPBOARD_SERVICE);
    clipboardManager.setText("text to clip");
    }
    

    在xml文本视图中粘贴此代码

    android:textIsSelectable="true"
    
    然后在java文件中

     final TextView txtcopypaste = findViewById(R.id.txtcopypaste); // my textview
        txtcopypaste.setOnClickListener(new View.OnClickListener() { // set onclick listener to my textview
            @Override
            public void onClick(View view) {
                ClipboardManager cm = (ClipboardManager)getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
                cm.setText(txtcopypaste.getText().toString());              
                Toast.makeText(getApplicationContext(), "Copied :)", Toast.LENGTH_SHORT).show();
            }
        });
    
    要求:需要复制并粘贴文本视图中的文本

    结果:单击textview后,使用textview。它会自动复制textview中的文本

    注意:导入剪贴板管理器时,请尝试选择

    请选择文本剪贴板管理器

    import android.text.ClipboardManager; // prefer this 
    
    import android.content.ClipboardManager; // Not this
    
    尽量避免使用内容剪贴板管理器

    import android.text.ClipboardManager; // prefer this 
    
    import android.content.ClipboardManager; // Not this
    

    如果有人想多走一步,只需单击一下,即可选择并复制到剪贴板:

     phone.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                                ClipData clip = ClipData.newPlainText("PhoneNumber", phone.getText());
                                clipboard.setPrimaryClip(clip);
    
                            }
                        });
    

    phone是
    TextView
    phone。Text
    是将复制到剪贴板的文本。

    是您要查找的吗?它类似,但不相同,因为我要复制所有文本。但看起来是一样的。问题是,这里的答案只能从API 11开始工作,我需要从API 7开始工作的东西。
    ClipboardManager
    从API 1开始就可用(请看)。长按一下,然后弹出一个窗口复制到剪贴板怎么样?@Jermin是的,看来我必须制定一个自定义解决方案。一个好的策略是将此与Commonware的答案一起使用。由于添加
    android:textIsSelectable
    存在于布局中,因此在较低的API级别上它将被忽略。然后在if语句中使用Ixx的解决方案,检查API级别是否低于11。两全其美。android:textIsSelectable的好处在于它提供了平台的文本选择操作栏,并且有一种很好的本地感觉。ClipboardManager类型中的方法setText(CharSequence)是不受欢迎的,这个答案是两年多前的。请随意编辑或添加一个新的。是否可以为EditTextPreference执行此操作?@powder366:我认为
    EditTextPreference
    已经支持复制/粘贴。在设置应用程序中,它似乎确实存在。实际上,它似乎是一个bug。显示在我的三星4.2.2设备上。Nexus7和Nexus10可以工作。请注意,如果您的文本视图最初是隐藏的,并且您使用setVisibility以编程方式显示它,那么您需要使用textView.setTextIsSelectable(true)来实现这一点。在这种情况下,它不能通过xml工作。我是这样做的。当我点击文本时,工具栏上的“复制”和“选择”按钮打开。但在我点击它们之后,什么都没有发生。我能做什么?这个解决方案比用绿色复选标记为“正确”的解决方案好。