Androidアプリでプログラムでテキストをコピーする方法は?
-
04-07-2019 - |
質問
Androidアプリを作成していますが、EditTextウィジェットのテキスト値をコピーしたいです。ユーザーがMenu+A
を押してからMenu+C
を押して値をコピーすることは可能ですが、プログラムでこれを行うにはどうすればよいですか
解決
ClipboardManager#setPrimaryClip
メソッドを使用する:
import android.content.ClipboardManager;
// ...
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
他のヒント
だから誰もがこれをどのように行うべきかについて同意しますが、完全なソリューションを提供したい人はいないので、ここに行きます:
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" />
Googlingはandroid.content.ClipboardManagerを表示しますが、私がしたように、クリップボードはAPIでは使用できないことを決定できます<!> lt; 11、ドキュメントページに<!> quot;以来:APIレベル11 <!> quot;。
実際には2つのクラスがあり、2つ目は最初のクラスを拡張します-android.text.ClipboardManagerとandroid.content.ClipboardManager。
android.text.ClipboardManagerはAPI 1以降に存在しますが、テキストコンテンツでのみ機能します。
android.content.ClipboardManagerはクリップボードを操作するための推奨される方法ですが、APIレベル<!> ltでは使用できません。 11(ハニカム)。
それらのいずれかを取得するには、次のコードが必要です:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ただし、 API <!> lt; 11 インポートする必要があるandroid.text.ClipboardManager
および API <!> gt; = 11 android.content.ClipboardManager
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());
}
これを試すことができます。
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());
}
}
}
Androidサポートライブラリの更新
Android Oreoの時点で、サポートライブラリはAPI 14にのみなります。ほとんどの新しいアプリはおそらく最小APIが14であるため、他の一部で言及されている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ブロックを使用しました。その方が読みやすい場合は、それぞれを確認できます。
TextViewの標準のコピー/貼り付けを有効にするために、Uは次のいずれかを選択できます。
レイアウトファイルの変更:TextViewに以下のプロパティを追加します
android:textIsSelectable="true"
Javaクラスで、次の2行を文法的に設定します。
myTextView.setTextIsSelectable(true);
TextViewを長押しすると、コピー/貼り付けアクションバーが表示されます。
@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);
Where label
は、クリップデータのユーザー表示ラベルであり、
text
は、クリップ内の実際のテキストです。 公式ドキュメント。
このインポートを使用することが重要です:
import android.content.ClipboardManager;
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
そしてインポート import android.content.ClipboardManager;