Android Studio скопировать в буфер обмена

Обновлено: 29.01.2023

В этом руководстве мы реализуем функцию копирования и вставки в TextView в нашем приложении для Android.
В конце этой статьи вы сможете скопировать текст в буфер обмена системы Android, а затем вставить данные этого буфера обмена.

Буфер обмена Andorid — копирование и вставка

Вы, должно быть, заметили, что EditText имеет встроенный диспетчер буфера обмена для функции копирования и вставки.
А TextView — нет. Поэтому, чтобы разрешить копирование и вставку текстовых представлений, нам нужно зарегистрировать ContextMenu.

Следовательно, чтобы получать события меню, нам необходимо registerForContextMenu.
После этого вы можете долго нажимать на TextView, чтобы отобразить меню.

Но где меню?

Меню создается в методе onCreateContextMenu().
Действия пунктов меню задаются в методе onContextItemSelected.

Копирование текста в буфер обмена

Текст TextView легко скопировать в буфер обмена. Вам просто нужно установить тип ClipData как newPlainText и передать строку.

Вставка текста в буфер обмена

Теперь, когда вы скопировали текст в буфер обмена, просто вставьте его, используя следующий фрагмент кода:

Здесь мы вставляем первые данные из буфера обмена. Если у нас есть несколько скопированных текстов, их можно вставить с помощью pasteData.getItemAt(1) и так далее.

Теперь давайте перейдем к части этой статьи, посвященной реализации.
В следующем разделе мы разработаем простое приложение для Android, в котором вы сможете копировать и вставлять текст из одного элемента TextView в другой.

Структура проекта

Android Textview Копировать и вставить структуру проекта

Android Textview Копировать и вставить структуру проекта

Код макета activity_main.xml приведен ниже:

Код класса MainActivity.java приведен ниже:

getItemCount() используется для получения элементов, находящихся в буфере обмена.
Вы также можете настроить копирование данных буфера обмена в действии элемента меню копирования onContextItemSelected.

Вывод

Выход вышеуказанного приложения в действии приведен ниже:

Вывод копирования и вставки в Android TextView

Это подводит итог этому руководству. Можете ли вы добавить опцию Cut Menu? Публикуйте фрагменты кода в комментариях!

Ссылки для скачивания

Вы можете сделать это заранее и скачать полный исходный код по ссылке ниже или посетить наш репозиторий Github.

Может ли кто-нибудь сказать мне, как скопировать текст, присутствующий в определенном текстовом представлении, в буфер обмена при нажатии кнопки?

Я хочу скопировать текст в TextView textView в буфер обмена при нажатии кнопки bCopy.


27 ответов 27

убедитесь, что вы импортировали android.content.ClipboardManager, а НЕ android.text.ClipboardManager. Последнее устарело. Перейдите по этой ссылке для получения дополнительной информации.


В androidx он фактически становится ClipboardManager clipboard = getSystemService(getContext(), ClipboardManager.class);

Вот метод копирования текста в буфер обмена:

Этот метод работает на всех устройствах Android.


Я не понимаю, что имеется в виду под "контекстом". Можете ли вы добавить пример того, как правильно вызывать этот метод? Спасибо.

@E_Blue выглядит так, как будто вы наивный разработчик Android, который спрашивает о контексте. Что ж, это тоже не проблема, просто следите за своим тоном и тоже изучайте/изучайте вещи.

Вчера я сделал этот класс. Возьмите, это для всех уровней API


Что делает "coerceToText"? также возможно ли копировать/вставлять в буфер обмена другие типы данных (например, растровое изображение)?

Но я думаю, что разработчикам пора прекратить поддержку API17. Старших типов осталось не так много, и они не склонны скачивать новые приложения? Например, я использую старые устройства для навигации на своем паруснике, а все остальное стирается. Я не против выкинуть такие юниты за борт по ошибке?

В качестве удобного расширения kotlin:

Обновление:

Если вы используете ContextCompat, вы должны использовать:


на самом деле он изменился на context.getSystemService(ClipboardManager::class.java), вы указываете на сигнатуру ContextCompat, не так ли? Спасибо за отзыв

Для Jetpack Compose

Просто используйте это. Он работает только для Android API >= 11, до этого вам придется использовать ClipData.

Надеюсь, это помогло вам :)

[ОБНОВЛЕНИЕ 19.03.2015] Как сказал Уджвал Сингх, метод setText теперь устарел, вы должны использовать, как это рекомендуется в документации, setPrimaryClip(clipData)


Это имя моей переменной. Если вы находитесь в своей деятельности, просто используйте (ClipboardManager) this.getSystemService(Context.CLIPBOARD_SERVICE); _clipboard.setText(ВАШ ТЕКСТ);

Это можно сделать в Котлине следующим образом:

Где file.readText() — ваша входная строка.


используйте эту функцию для копирования в буфер обмена



Функция расширения Kotlin 2021:


используйте этот метод:

вместо setPrimaryClip мы также можем использовать следующие методы:

Очищает любой текущий основной клип из буфера обмена.

Возвращает текущий основной клип из буфера обмена.

Возвращает описание текущего основного клипа в буфере обмена, но не копию его данных.

Этот метод устарел. Вместо этого используйте getPrimaryClip(). Это извлекает основной клип и пытается преобразовать его в строку.

Возвращает значение true, если в данный момент в буфере обмена есть основной клип.



С Jetpack Compose это очень просто:


int sdk = android.os.Build.VERSION.SDK_INT;

Простой и удобный Android с использованием Java.


не забывайте контекст, который мог быть определен в mContext прямо перед этим. Или просто добавьте MyActivity.this, getAcpplicationContext. Все тот же getApplicationContext.getSystemService

==> Слишком просто копировать контент одним щелчком мыши.

-> Сохранить текст в строковой переменной.

-> Сделать переменной ClipboardManager

-> Сделать переменной ClipData

-> необходимо импортировать из пакета как "android.content."

-> установить клип в clipboard.setPrimaryclick.


Простая функция расширения Kotlin для копирования текста в буфер обмена


Попробуйте следующий код. Он будет поддерживать новейший API:


Вы можете выполнить эту функцию копирования в буфер обмена при событии кнопки onclick. поэтому поместите эти строки кода внутри вашей кнопки onClickListerner

Буфер обмена — это платформа для Android, которая удобна для копирования и вставки различных типов данных, таких как текстовые строки, изображения, двоичные потоковые данные и другие сложные типы данных.

Как правило, платформа буфера обмена Android хранит простые текстовые данные непосредственно в буфере обмена, а сложные данные хранятся в виде ссылки, которую приложение вставки разрешает поставщику контента.

В Android копирование и вставка буфера обмена работает внутри приложения и между приложениями, которые реализуют платформу.

Чтобы использовать структуру буфера обмена Android, нам нужно поместить данные в объект клипа, а затем поместить объект клипа в общесистемный буфер обмена.

Объект клипа в Android может принимать одну из трех форм для копирования и вставки данных в приложениях Android.

< td>Это текстовая строка. Мы можем поместить строку непосредственно в объект клипа, а затем поместить объект клипа в буфер обмена. Чтобы вставить строку, мы можем получить объект clip из буфера обмена и скопировать строку в хранилище нашего приложения.
Форма данных клипаОписание
Текст
URI Он представляет любую форму URI и в первую очередь для копирования сложных данных от поставщика контента. Чтобы скопировать данные, нам нужно поместить объект Uri в объект клипа, а затем поместить объект клипа в буфер обмена. Чтобы вставить данные, нам нужно получить объекты clip и Uri, преобразовать их в источник данных, такой как поставщик контента, и скопировать данные из источника в хранилище нашего приложения.
Intent Чтобы скопировать данные, нам нужно создать объект Intent, поместить его в объект клипа, а затем поместить объект клипа в буфер обмена.Чтобы вставить данные, нам нужно получить объект clip, а затем скопировать объект Intent в область памяти нашего приложения.

В Android буфер обмена может одновременно содержать только один объект клипа. Когда приложение помещает объект клипа в буфер обмена, предыдущий объект клипа исчезает.

Чтобы использовать буфер обмена в наших приложениях, нам нужно создать экземпляр класса ClipboardManger, вызвав метод getSystemService().

Ниже приведен синтаксис создания экземпляра ClipboardManager путем вызова метода getSystemService().

Если вы заметили приведенный выше фрагмент кода, мы создали экземпляр ClipboardManager, вызвав метод getSystemService().

Android копирует данные в буфер обмена

Как уже говорилось, чтобы скопировать данные в буфер обмена, нам нужно создать экземпляр объекта ClipData, вызвав метод соответствующего типа данных класса ClipData. В случае, если это текстовый тип, то будет вызван метод newPlainText и добавление готового объекта ClipData в объект ClipboardManager с помощью метода setPrimaryClip.

Ниже приведен фрагмент кода копирования текстовых данных в буфер обмена в приложениях для Android.

Менеджер буфера обменаМенеджер буфера обмена ;
Данные клипа clipData ;

String txtcopy = "Добро пожаловать в тутлейн" ;
clipData = ClipData.newPlainText («текст», txtcopy);
clipboardManager .setPrimaryClip( clipData );

Если вы заметили приведенный выше фрагмент кода, мы скопировали текстовый тип данных в объект ClipData и добавили объект ClipData в объект ClipboardManager, используя метод setPrimaryClip для копирования данных в буфер обмена.

Android: вставка данных из буфера обмена

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

Как уже говорилось, чтобы вставить данные из буфера обмена, нам нужно создать экземпляр объекта ClipData, чтобы получить данные клипа из объекта ClipboardManager с помощью метода getPrimaryClip(). Если данные доступны, получите данные из данных клипа, используя объект ClipData.Item. После этого скопируйте его текст в собственное хранилище с помощью getText().

Ниже приведен фрагмент кода для вставки данных из буфера обмена в приложения для Android.

ClipData pData = clipboardManager .getPrimaryClip();
ClipData.Item item = pData.getItemAt( 0 );
String txtpaste = item.getText().toString();

Если вы видите приведенный выше фрагмент кода, мы получаем данные клипа из объекта ClipboardManager с помощью метода getPrimaryClip(). После этого мы получаем данные из объекта ClipData с помощью ClipData.Item и метода getText().

Теперь мы увидим, как использовать буфер обмена для копирования и вставки данных текстового типа в приложении Android с примерами.

Пример приложения Android Clipboard

Ниже приведен пример копирования данных текстового типа в буфер обмена из edittext при нажатии кнопки и вставки данных буфера обмена в другой элемент управления edittext при нажатии кнопки в приложении для Android.

Создайте новое приложение для Android с помощью Android Studio и дайте имена в виде ClipboardExample. Если вы не знаете о создании приложения в Android Studio, ознакомьтесь с этой статьей Приложение Android Hello World.

После создания приложения откройте файл activity_main.xml по пути к папке \res\layout и напишите код, как показано ниже.

activity_main.xml

xml version= "1.0" encoding= "utf-8" ?>
LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android"
android :orientation= "вертикальный" android :layout_width= "match_parent"
android :layout_height= "match_parent" >
TextView
android :id = "@+id/fstTxt"
android :layout_width= "wrap_content"
android :layout_height= "wrap_content"
android :layout_marginLeft= "100dp"
android :layout_marginTop= " 150dp"
android :text= "Введите текст для копирования"
/>
EditText
android :id= "@+id/txtCopy"
android :layout_width= "wrap_content"
android :layout_height= "wrap_content"
android :layout_marginLeft= "100dp"
android :text= "Добро пожаловать в Тутлейн"
android :ems= "10" >
EditText >
Кнопка
android :id= "@+id/btnCopy"
android :layout_width= "wrap_content"
android :layout_height= "wrap_content"
android :layout_height= "wrap_content"
/>android :layout_marginLeft= "100dp"
android :text= "Копировать данные в буфер обмена" />

TextView
android :id= "@+id/secTxt" < br /> android :layout_width= "wrap_co ntent"
android :layout_height= "wrap_content"
android :text= "Показать скопированные данные"
android :layout_marginLeft= "100dp"
/>
EditText
android :id= "@+id/txtShow"
android :layout_width= "wrap_content"
android :layout_height= "wrap_content"
android :layout_marginLeft= "100dp"
android :ems= "10" />

Кнопка
android :id= "@+id/btnShow"
android :layout_width= "wrap_content"
android : layout_height= "wrap_content"
android :layout_marginLeft= "100dp"
android :text= "Показать данные буфера обмена" />

LinearLayout >

Теперь откройте основной файл активности MainActivity.java по пути \java\com.tutlane.clipboardexample и напишите код, как показано ниже

MainActivity.java

пакет com.tutlane.clipboardexample;
импортировать android.content.ClipData;
импорт android.content.ClipboardManager;
импортировать android.content.Context;
импорт android.support.v7.app.AppCompatActivity;
импорт android.os.Bundle;
импортировать android.view.View;
импортировать android.widget.Button;
импорт android.widget.EditText;
импортировать android.widget.Toast;

открытый класс MainActivity расширяет AppCompatActivity private EditText ctxt ;
частный EditText ptxt;
приватная кнопка btncpy ;
приватная кнопка btnpst ;
частный ClipboardManager clipboardManager ;
частный ClipData clipData ;

@Override
protected void onCreate(Bundle saveInstanceState) super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main );
ctxt =(EditText)findViewById(R.id. txtCopy );
ptxt = (EditText)findViewById(R.id. txtShow );
btncpy = (Кнопка)findViewById(R.id. btnCopy );
btnpst = (Кнопка)findViewById(R.id.btnShow );
clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE );
btncpy .setOnClickListener( new View.OnClickListener() @Override
public void onClick(View v) String txtcopy = ctxt .getText().toString();
clipData = ClipData.newPlainText( "text", txtcopy);
clipboardManager .setPrimaryClip( clipData );
Toast.makeText(getApplicationContext(), "Данные скопированы в буфер обмена" , Toast. LENGTH_SHORT ).show();
>
>);
btnpst .setOnClickListener( new View.OnClickListener() @Override
public void onClick(View v) ClipData pData = clipboardManager .getPrimaryClip();
ClipData.Item item = pData.getItemAt( 0 );
String txtpaste = item.getText().toString();
ptxt .setText(txtpaste);
Toast.makeText(getApplicationContext(), "Данные вставлены из буфера обмена", ,Toast .LENGTH_SHORT ).show();
>
>);
>
>

Если вы заметили приведенный выше фрагмент кода, мы использовали объекты ClipboardManager, ClipData, ClipData.Item для копирования данных в буфер обмена и вставки данных из буфера обмена в соответствии с нашими требованиями.

Вывод примера приложения Android Clipboard

Когда мы запустим вышеуказанную программу в Android Studio, мы получим результат, как показано ниже.

Если мы введем текст в первый текст редактирования и нажмем кнопку «Копировать данные в буфер обмена», текст будет скопирован в буфер обмена, а когда мы нажмем «Показать данные буфера обмена», данные буфера обмена будут вставлены во второй элемент управления текстом редактирования.

Вот как мы можем использовать структуру буфера обмена в приложениях Android для копирования и вставки данных в соответствии с нашими требованиями.

Разработка приложений для Android — это новый бум в индустрии программирования в наши дни. Многие компании планируют выпустить свои Android-приложения для клиентов и читателей. Успешное Android-приложение состоит из различных небольших фрагментов кода, которые вы внедряете в приложение. Эти фрагменты могут варьироваться от функции простого копирования в буфер обмена или функции обмена контентом, отображаемым на экране, через какое-либо другое приложение, до довольно интенсивного программирования игры.

Сегодня я научу вас, ребята, как создать простую функцию копирования в буфер обмена в вашем приложении для Android. В нашем коде нам нужно предоставить строку, которая будет скопирована в буфер обмена, и после того, как она будет скопирована, пользователю будет показано простое всплывающее сообщение (или вы даже можете создать собственное всплывающее сообщение), в котором будет указано, что текст был скопирован в буфер обмена. Прежде чем мы начнем, отметим, что используемый нами метод копирования буфера обмена требует минимального уровня API 11. Убедитесь, что он есть в вашем приложении. Если его нет, обязательно измените его в файле манифеста Android.

Обязательно прочтите, прежде чем продолжить:

Давайте начнем с нашего простого приложения, которое позволит нам скопировать строку в буфер обмена. Для этого урока я собираюсь создать новое приложение в Eclipse, у меня будет текстовое представление и 2 кнопки в макете. Как только кнопка будет нажата или нажата, она скопирует текст текстового представления или любой строки в буфер обмена и сгенерирует простое всплывающее уведомление.

Копировать в буфер обмена на Android

<р>1. Создайте новое приложение или используйте существующее, если хотите. Используйте следующие настройки для создания нового приложения, но вы можете изменить имя и другие параметры по своему усмотрению. Но убедитесь, что для минимального уровня API установлено значение не ниже 11.

Копировать в Настройки проекта буфера обмена

<р>2. Затем в файле основного макета перейдите в представление XML и вставьте следующие строки кода. Это позволит вам создать представление с текстовым представлением и двумя кнопками, как мы обсуждали.

<р>3. Теперь откройте файл Java основного действия в папке src.

<р>4. В этом файле запишите следующий код в функции onCreate класса.

<р>5. Далее нам нужно настроить прослушиватели кликов для двух кнопок. Кнопка "b" копирует текст текстового представления, тогда как кнопка "b2" копирует текст строки.

<р>6. Наконец, нажмите CTRL + SHIFT + O на клавиатуре, чтобы импортировать все необходимые файлы. Полный код Java для справки находится здесь.

<р>7. Ну вот и все. Часть кода завершена. Теперь запустите это приложение на виртуальном устройстве Android и посмотрите, как текст копируется в буфер обмена.

Копировать в Скриншот буфера обмена

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

СКАЧАТЬ ИСТОЧНИК

Сообщите мне в разделе комментариев, если вы столкнулись с какими-либо ошибками. Я буду более чем счастлив помочь вам с этими ошибками. Кроме того, не забудьте подписаться на Slash Coding, чтобы получать последние обновления сообщений через RSS-каналы, Facebook, Google+ или Twitter.

Читайте также: