web-dev-qa-db-ja.com

Androidアプリでプログラムでテキストをコピーする方法は?

Androidアプリを作成していて、EditTextウィジェットのテキスト値をコピーしたい。ユーザーがMenu+Aを押してからMenu+Cを押して値をコピーすることは可能ですが、これをプログラムで行うにはどうすればよいですか?

214
Zach

ClipboardManager#setPrimaryClip メソッドを使用:

import Android.content.ClipboardManager;

// ...

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

ClipboardManager AP​​Iリファレンス

385
FlySwat

したがって、これをどのように行うかについては全員が同意しますが、完全なソリューションを提供したい人はいないので、以下に示します。

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" />
213
Warpzit

Googlingを使用すると、Android.content.ClipboardManagerが表示されます。ドキュメントページに「Since:API Level 11」と記載されているため、クリップボードはAPI <11では使用できません。

実際には2つのクラスがあり、2番目のクラスは最初のクラスを拡張します-Android.text.ClipboardManagerとAndroid.content.ClipboardManager。

Android.text.ClipboardManagerはAPI 1以降に存在しますが、テキストコンテンツでのみ機能します。

Android.content.ClipboardManagerは、クリップボードを操作するための好ましい方法ですが、APIレベル<11(Honeycomb)では利用できません。

それらのいずれかを取得するには、次のコードが必要です。

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

しかしAPI <11の場合はAndroid.text.ClipboardManagerをインポートする必要があり、API> = 11Android.content.ClipboardManagerの場合はインポートする必要があります

15
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());
}

これを試すことができます。

14
ayrina

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());
        }
    }
}
8
live-love

Androidサポートライブラリの更新

Android Oreoの時点で、サポートライブラリはAPI 14のみになります。ほとんどの新しいアプリはおそらく14の最小APIを持っているため、一部で言及されている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()でサービスを取得できます。
  • 複数のことがnullになる可能性があるため、貼り付けテキストの取得にtry/catchブロックを使用しました。より読みやすい場合は、それぞれを確認できます。
6
Suragch

TextViewの標準のコピー/貼り付けを有効にするために、Uは次のいずれかを選択できます。

レイアウトファイルの変更:TextViewに以下のプロパティを追加します

Android:textIsSelectable="true"

Javaクラスで、この2行を文法的に設定します。

myTextView.setTextIsSelectable(true);

TextViewを長押しすると、コピー/貼り付けアクションバーが表示されます。

5
King of Masses
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

およびインポートimport Android.content.ClipboardManager;

4
Mor2

@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;
3
Trinity