クリップボードにコピーする
これはOS標準の挙動だが、文字列に対して長押下の選択操作を行えば、「クリップボードにコピーするかどうか」のUIは、画面に表示される。
以下のような、お馴染みのやつだ。
ただ、そうだとしても、アプリ内での特定操作で「クリップボードにコピーする」機能を実現したいこともあるだろう。
サンプルコード
そのまんま、「ClipboardManager(クリップボード・マネージャー)」という名前のクラスが存在するので、これを使えば解決だ。
以下のようにして、使っている。
/**
* Copy to clipboard.
*
* @param context the context to use
* @param label user-visible label for the clip data
* @param text the actual text in the clip
* @return result
*/
public static void copyToClipboard(Context context, String label, String text) {
// copy to clipboard
ClipboardManager clipboardManager =
(ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
if (null == clipboardManager) {
return;
}
clipboardManager.setPrimaryClip(ClipData.newPlainText(label, text));
}
「ClipData.newPlainText」の引数「text」が、コピー対象の文字列だ。
で、「label」なのだが、これは必要な開発者しか参照しないデータなので、私はいつも「""(空文字)」を設定している。
これでまったく問題ない。
ちなみに「label」を設定すると、
ClipData clipData = ClipData.newPlainText(label, text);
clipData.getDescription();
このように、「Description」として取得できるので、アプリ内でコピー後に何らかの処理をしたい場合に有効な手段だ。
(※「minSdkVersion 21:Lollipop」を前提としたサンプルコード)
参考記事
サンプルアプリ
以下の電卓アプリで「計算結果」をタップすると、上記サンプルコードの処理が走るようになっているので、実際に他アプリで貼り付けて、参考にしてみてほしい。
シンプルな電卓は気まぐれに着せ替えする -計算過程表示や共有など無料の計算機- :CALCBOSS
【動作環境】
Android OS 5.0以上
Made in Japan.
© CUTBOSS
Producer & Director, Boss of the Barber.
Lead Programmer & Designer, Boss of the Barber.