Я создаю приложение для Android и хочу скопировать текстовое значение виджета EditText. Пользователь может нажать Menu+A
затем, Menu+C
чтобы скопировать значение, но как мне сделать это программно?
231
Я создаю приложение для Android и хочу скопировать текстовое значение виджета EditText. Пользователь может нажать Menu+A
затем, Menu+C
чтобы скопировать значение, но как мне сделать это программно?
Ответы:
Используйте
ClipboardManager#setPrimaryClip
метод:ClipboardManager
Справочник по APIисточник
import android.content.ClipboardManager;
label
?Context context = getApplicationContext(); Toast.makeText(context, "text copied", Toast.LENGTH_LONG).show();
Таким образом, все согласны с тем, как это должно быть сделано, но поскольку никто не хочет дать полное решение, здесь идет речь:
Я предполагаю, что у вас есть что-то вроде следующего, объявленного в манифесте:
источник
label
вnewPlainText
методе? Документация гласитlabel User-visible label for the clip data.
. Но когда онlabel
виден пользователю? И какое значение / имя мне следует указатьlabel
?Googling приводит вас к android.content.ClipboardManager, и вы можете, как и я, решить, что буфер обмена недоступен в API <11, потому что на странице документации написано «С: API Level 11».
На самом деле существует два класса, второй расширяет первый - android.text.ClipboardManager и android.content.ClipboardManager.
android.text.ClipboardManager существует с API 1, но работает только с текстовым содержимым.
android.content.ClipboardManager является предпочтительным способом работы с буфером обмена, но он недоступен на уровне API <11 (Honeycomb).
Чтобы получить любой из них вам нужен следующий код:
Но для API <11 вы должны импортировать,
android.text.ClipboardManager
а для API> = 11android.content.ClipboardManager
источник
Вы можете попробовать это ..
источник
Вот некоторый код для реализации некоторых функций копирования и вставки из EditText (спасибо Warpzit за проверку версии). Вы можете привязать их к событию нажатия кнопки.
источник
Обновление библиотеки поддержки Android
Начиная с Android Oreo, библиотека поддержки работает только до API 14. Большинство новых приложений, вероятно, также имеют минимальный API 14, и, таким образом, не нужно беспокоиться о проблемах с API 11, упомянутых в некоторых других ответах. Большая часть кода может быть очищена. (Но посмотрите мою историю редактирования, если вы по-прежнему поддерживает более низкие версии.)
копия
Вставить
Я добавляю этот код в качестве бонуса, потому что копирование / вставка обычно выполняется парами.
Ноты
android.content.ClipboardManager
версию, а не старуюandroid.text.ClipboardManager
. То же самое дляClipData
.context.getSystemService()
.null
. Вы можете проверить каждый из них, если найдете этот способ более читабельным.источник
Чтобы включить стандартное копирование / вставку для TextView, U может выбрать один из следующих:
Изменение в файле макета: добавьте свойство ниже к вашему TextView
В вашем Java-классе напишите эту строку два грамматически.
myTextView.setTextIsSelectable(true);
И долгое нажатие на TextView вы можете увидеть панель действий копирования / вставки.
источник
И импорт
import android.content.ClipboardManager;
источник
@FlySwat уже дал правильный ответ, я просто делюсь полным ответом:
Используйте метод ClipboardManager.setPrimaryClip ( http://developer.android.com/reference/android/content/ClipboardManager.html ):
Где
label
видимая пользователем метка для данных клипа иtext
фактический текст в клипе. Согласно официальным документам .Важно использовать этот импорт:
источник
Вот мой рабочий код
источник
Для Kotlin мы можем использовать следующий метод. Вы можете вставить этот метод внутри действия или фрагмента.
источник
context.
была та часть, по которой я скучал - возможно, потому что я делаю это внутри фрагмента.