Android: скопировать в буфер обмена выделенный текст из TextView - PullRequest
20 голосов
/ 08 июля 2011

Есть ли возможность скопировать в буфер обмена из компонента пользовательского интерфейса TextView только выделенный текст?

Я перехватил событие длительного нажатия и скопировал полный текст в буфер обмена, но теперь я хочу указатьначало и конец выделения для копирования из TextView.

Спасибо.

Ответы [ 2 ]

98 голосов
/ 08 июля 2011
TextView tv;
String stringYouExtracted = tv.getText().toString();
int startIndex = tv.getSelectionStart();
int endIndex = tv.getSelectionEnd();
stringYouExtracted = stringYouExtracted.subString(startIndex, endIndex);
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
clipboard.setText(stringYouExtracted);

РЕДАКТИРОВАТЬ (Предыдущий - полный ответ, но я столкнулся с моим ответом по ошибке, поэтому я хотел бы добавить) :

С более новыми API, измените последние две строки на:

if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
    android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    clipboard.setText(stringYouExtracted);
} else {
    android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", stringYouExtracted);
            clipboard.setPrimaryClip(clip);
}

"Copied Text" - заголовок для вашей сущности COPY в более новой APIS

1 голос
/ 08 мая 2015

вы можете сделать это так:

ClipboardManager myClipboard = myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData myClip;
EditText editText = (EditText) findViewById(R.id.editText3);
int min = 0;
int max = editText.getText().length();
if (editText.isFocused()) {
    final int selStart = editText.getSelectionStart();
    final int selEnd = editText.getSelectionEnd();
    min = Math.max(0, Math.min(selStart, selEnd));
    max = Math.max(0, Math.max(selStart, selEnd));
}
// here is your selected text
final CharSequence selectedText = editText.getText().subSequence(min, max);
String text = selectedText.toString();


// copy to clipboard
myClip = ClipData.newPlainText("text", text);
myClipboard.setPrimaryClip(myClip);

Заменить EditText на TextView

...