Как включить стандартную вставку копирования для TextView в Android?


Я хочу включить стандартную вставку копирования для TextView (то же самое, что и для EditText). Как я могу это сделать?

Я попытался использовать не редактируемый EditText, но он не работал хорошо (иногда он становился редактируемым или наложение copy paste не отображалось). И это, вероятно, не очень хороший подход в целом.

нужно рабочее решение, начиная с API 7.

7 78

7 ответов:

попробовать android:textIsSelectable.

т. е. android:textIsSelectable="true"

чтобы включить стандартное копирование / вставку для TextView, вы можете выбрать один из следующих вариантов:

  1. изменить файл макета: добавить свойство ниже в свой TextView

    android:textIsSelectable="true"

  2. в вашем классе Java напишите эту строку, чтобы установить ее программно. myTextView.setTextIsSelectable(true);

и длительное нажатие на TextView вы можете увидеть панель действий копирования / вставки.

это работает для копирования pre-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();
    }
});

требуется 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;
            }
        });
  1. темы

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

    или

    @android:style/Theme.WithActionBar
    
  2. установить TextView в xml

    android:textIsSelectable="true"
    
  3. посмотреть результат

этой лучше:

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

на EditText, в манифесте внутри действия используйте android:windowSoftInputMode="adjustResize"