Я создаю приложение для Android, и я хочу скопировать текстовое значение виджета EditText. Пользователь может нажать Menu+A, затем Menu+C, чтобы скопировать значение, но как бы это сделать программно?
Как программно копировать текст в приложении для Android?
Ответ 1
 Используйте метод  ClipboardManager#setPrimaryClip:
import android.content.ClipboardManager;
// ...
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
Ответ 2
Итак, все согласны с тем, как это должно быть сделано, но поскольку никто не хочет дать полное решение, здесь говорится:
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);
}
Я предполагаю, что у вас есть что-то вроде следующего в манифесте:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
Ответ 3
Googling приводит вас в android.content.ClipboardManager, и вы могли бы решить, как и я, что Clipboard недоступен в API < 11, потому что на странице документации указано "С: API-уровень 11".
На самом деле есть два класса, второй - первый - android.text.ClipboardManager и android.content.ClipboardManager.
android.text.ClipboardManager существует с API 1, но работает только с текстовым контентом.
android.content.ClipboardManager - предпочтительный способ работы с буфером обмена, но он недоступен на уровне API < 11 (Соты).
Чтобы получить любой из них, вам понадобится следующий код:
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
Вот некоторый код для реализации некоторых функций копирования и вставки из 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
Чтобы включить стандартную копию/вставку для TextView, U может выбрать одно из следующих значений:
Измените файл макета: добавьте свойство ниже в свой TextView
android:textIsSelectable="true"
В вашем классе Java напишите эту строку, чтобы установить грамматически.
 myTextView.setTextIsSelectable(true);
И долгое нажатие на TextView вы можете увидеть панель действий копирования/вставки.
Ответ 7
Обновление библиотеки поддержки Android
Начиная с Android Oreo, библиотека поддержки сводится только к API 14. Большинство новых приложений, вероятно, также имеют минимальный API 14, и, таким образом, не нужно беспокоиться о проблемах с 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. Вы можете проверить каждый из них, если найдете этот способ более читабельным.
Ответ 8
@FlySwat уже дал правильный ответ, я просто разделяю полный ответ:
Использовать ClipboardManager.setPrimaryClip(http://developer.android.com/reference/android/content/ClipboardManager.html) метод:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip); 
Где label - это метка, видимая пользователем, для данных клипа и
text - это фактический текст в клипе. Согласно официальные документы.
Важно использовать этот импорт:
import android.content.ClipboardManager;
Ответ 9
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
 И импортировать import android.content.ClipboardManager;
