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

时间:2012-04-30 15:17:46

标签: android textview copy-paste

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

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

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

9 个答案:

答案 0 :(得分:189)

尝试android:textIsSelectable

即,android:textIsSelectable="true"

答案 1 :(得分:53)

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

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

    android:textIsSelectable="true"

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

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

答案 2 :(得分:19)

这适用于Honeycomb之前的复制:

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

答案 3 :(得分:9)

  

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

答案 4 :(得分:3)

  1. 使用主题

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

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

    android:textIsSelectable="true"
    
  3. 请参阅result

答案 5 :(得分:1)

如果有人想加倍努力并选择并一键复制到剪贴板:

 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。

答案 6 :(得分:0)

对于EditText, 在清单里面活动使用  android:windowSoftInputMode="adjustResize"

答案 7 :(得分:0)

this更好:

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

答案 8 :(得分:0)

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

注意:在导入剪贴板管理器时请尝试偏爱

请首选文本剪贴板管理器

import android.text.ClipboardManager; // prefer this 

尝试避免使用内容剪贴板管理器

import android.content.ClipboardManager; // Not this