Androidアプリを作成していて、EditTextウィジェットのテキスト値をコピーしたいと思います。ユーザーがMenu+A
次にを押しMenu+C
て値をコピーすることは可能ですが、これをプログラムでどのように実行しますか?
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);
import android.content.ClipboardManager;
label
?
Context context = getApplicationContext(); Toast.makeText(context, "text copied", Toast.LENGTH_LONG).show();
だから誰もがこれをどのようにすべきかについて同意しますが、誰も完全な解決策を与えたくないので、ここに行きます:
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" />
label
in newPlainText
メソッドの使用法を正確に教えてください。ドキュメンタリーの状態label User-visible label for the clip data.
。しかし、label
ユーザーにはいつ表示されますか?そして、どのような値/名前を入れるべきlabel
ですか?
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> = 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 Oreoの時点で、サポートライブラリはAPI 14までしかありません。ほとんどの新しいアプリはおそらく最小API 14も備えているため、他のいくつかの回答で言及されているAPI 11の問題について心配する必要はありません。多くのコードをクリーンアップできます。(ただし、まだ下位バージョンをサポートしている場合は、編集履歴を参照してください。)
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", selectedText);
if (clipboard == null || clip == 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
。あなたがその方法がより読みやすくなっている場合は、それぞれを確認できます。@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;
これが私の作業コードです
/**
* Method to code text in clip board
*
* @param context context
* @param text text what wan to copy in clipboard
* @param label label what want to copied
*/
public static void copyCodeInClipBoard(Context context, String text, String label) {
if (context != null) {
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(label, text);
if (clipboard == null || clip == null)
return;
clipboard.setPrimaryClip(clip);
}
}
Kotlinの場合、次の方法を使用できます。このメソッドは、アクティビティまたはフラグメント内に貼り付けることができます。
fun copyToClipBoard(context: Context, message: String) {
val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("label",message)
clipBoard.setPrimaryClip(clipData)
}
context.
欠けていたのはこの部分でした-フラグメント内で実行しているためかもしれません。