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


118

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

我尝试使用不可编辑的EditText,但是效果不佳(有时它变得可编辑,或者未显示复制粘贴叠加层)。通常,这可能不是一个好方法。

需要一个从API 7开始的可行解决方案。


你在找什么?
Jermin Bazazian'4

相似,但不一样,因为我想复制所有文本。但是看起来一样。问题是有答案只能在开始11 API和我需要的东西,从API 7.作品
IXX

ClipboardManager自API 1起可用(请参见此处)。长按一下,弹出窗口复制到剪贴板怎么样?
Jermin Bazazian'4

@Jermin是的,看来我必须制定一个自定义解决方案。
Ixx 2012年

Answers:


226

尝试android:textIsSelectable

android:textIsSelectable="true"


可以为EditTextPreference做吗?
powder366 2013年

1
@ powder366:我认为EditTextPreference已经支持复制/粘贴。似乎在“设置”应用中。
CommonsWare 2013年

实际上,这似乎是一个错误。显示在我的Samsung 4.2.2设备上。Nexus7和Nexus10可以使用。code.google.com/p/android/issues/detail?id=26008
powder366 2013年

只需注意一下,如果您的文本视图最初是隐藏的,并且正在使用setVisibility以编程方式显示它,那么您需要使用textView.setTextIsSelectable(true)才能完成此工作。在这种情况下,它将无法通过xml进行工作。
Praveen Singh

58

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

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

    android:textIsSelectable="true"

  2. 在您的Java类中,编写此行以编程方式进行设置。 myTextView.setTextIsSelectable(true);

长按TextView可以看到复制/粘贴操作栏。


1
我这样做 当我单击文本时,带有“复制”和“选择所有”按钮的工具栏将打开。但是在我单击它们之后,什么都没有发生。我能做什么?
米娜·达西什

2
此解决方案比带有绿色对勾标记为正确的解决方案更好。
亚当·赫维兹

21

这适用于蜂窝前复制:

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

4
一个好的策略是将其与CommonsWare的答案一起使用。由于android:textIsSelectable在布局中添加了生命,因此在较低的API级别上只会被忽略。然后在if语句中使用Ixx的解决方案,该语句检查API级别是否低于11。有趣的android:textIsSelectable是,它为您提供了平台的文本选择操作栏,并具有良好的本机感觉。
emil10001 2012年

1
不建议使用ClipboardManager类型的setText(CharSequence)方法
S.M_Emamian 2015年

1
是的,这个答案来自两年多以前。随时编辑或添加新的。
Ixx

11

需要API 11,更新的代码,不建议使用以前的方法

全屏主题解决方案 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;
            }
        });

9

在xml textview中粘贴此代码

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中的文本。

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

注意:在导入剪贴板管理器时,请尽量选择

请喜欢文本剪贴板管理器

import android.text.ClipboardManager; // prefer this 

尽量避免内容剪贴板管理器

import android.content.ClipboardManager; // Not this

3
  1. 使用主题

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

    要么

    @android:style/Theme.WithActionBar
  2. 在xml中设置TextView

    android:textIsSelectable="true"
  3. 查看结果


3

如果有人想加倍努力并一键选择并复制到剪贴板,请执行以下操作:

 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.Text是将复制到剪贴板的Text。


0

更好:

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

-2

对于EditText活动中的清单中的,请使用 android:windowSoftInputMode="adjustResize"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.