Saya sedang membangun aplikasi Android dan saya ingin menyalin nilai teks dari widget EditText. Adalah mungkin bagi pengguna untuk menekan Menu+A
kemudian Menu+C
menyalin nilainya, tetapi bagaimana saya akan melakukan ini secara terprogram?
Saya sedang membangun aplikasi Android dan saya ingin menyalin nilai teks dari widget EditText. Adalah mungkin bagi pengguna untuk menekan Menu+A
kemudian Menu+C
menyalin nilainya, tetapi bagaimana saya akan melakukan ini secara terprogram?
Jawaban:
Gunakan ClipboardManager#setPrimaryClip
metode:
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();
Jadi semua orang sepakat tentang bagaimana ini harus dilakukan, tetapi karena tidak ada yang mau memberikan solusi lengkap, begini:
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);
}
Saya berasumsi Anda memiliki sesuatu seperti berikut yang dinyatakan dalam manifes:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
label
in newPlainText
? status dokumentasi label User-visible label for the clip data.
. Tetapi kapan hal itu label
terlihat oleh pengguna? Dan nilai / nama apa yang harus saya masukkan label
?
Googling membawa Anda ke android.content.ClipboardManager dan Anda dapat memutuskan, seperti yang saya lakukan, bahwa Clipboard tidak tersedia di API <11, karena halaman dokumentasi mengatakan "Sejak: API Level 11".
Sebenarnya ada dua kelas, yang kedua memperpanjang yang pertama - android.text.ClipboardManager dan android.content.ClipboardManager.
android.text.ClipboardManager sudah ada sejak API 1, tetapi hanya berfungsi dengan konten teks.
android.content.ClipboardManager adalah cara yang disukai untuk bekerja dengan clipboard, tetapi itu tidak tersedia di API Level <11 (Honeycomb).
Untuk mendapatkannya, Anda memerlukan kode berikut:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
Tetapi untuk API <11 Anda harus mengimpor android.text.ClipboardManager
dan untuk 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());
}
kamu bisa coba ini ..
Berikut adalah beberapa kode untuk mengimplementasikan beberapa fungsi salin dan tempel dari EditText (terima kasih kepada Warpzit untuk pemeriksaan versi). Anda dapat mengaitkan ini ke acara klik tombol Anda.
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());
}
}
}
Pada Android Oreo, perpustakaan dukungan hanya turun ke API 14. Sebagian besar aplikasi yang lebih baru mungkin juga memiliki min API 14, dan dengan demikian tidak perlu khawatir tentang masalah dengan API 11 yang disebutkan dalam beberapa jawaban lain. Banyak kode dapat dibersihkan. (Tetapi lihat riwayat edit saya jika Anda masih mendukung versi yang lebih rendah.)
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", selectedText);
if (clipboard == null || clip == null) return;
clipboard.setPrimaryClip(clip);
Saya menambahkan kode ini sebagai bonus, karena salin / tempel biasanya dilakukan berpasangan.
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
try {
CharSequence text = clipboard.getPrimaryClip().getItemAt(0).getText();
} catch (Exception e) {
return;
}
android.content.ClipboardManager
versi daripada yang lama android.text.ClipboardManager
. Sama untukClipData
.context.getSystemService()
.null
. Anda dapat memeriksa masing-masing jika Anda menemukan cara lebih mudah dibaca.Untuk mengaktifkan salin / tempel standar untuk TextView, Anda dapat memilih salah satu dari yang berikut:
Ubah file tata letak: tambahkan properti di bawah ini ke TextView Anda
android:textIsSelectable="true"
Di kelas Java Anda, tulis baris ini dua set secara tata bahasa.
myTextView.setTextIsSelectable(true);
Dan tekan lama pada TextView Anda dapat melihat copy / paste action bar.
@FlySwat sudah memberikan jawaban yang benar, saya hanya membagikan jawaban yang lengkap:
Gunakan metode 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);
Di mana label
label yang dapat dilihat pengguna untuk data klip dan
text
merupakan teks aktual dalam klip. Menurut dokumen resmi .
Penting untuk menggunakan impor ini:
import android.content.ClipboardManager;
Ini kode kerja saya
/**
* 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);
}
}
Untuk Kotlin, kita dapat menggunakan metode berikut. Anda dapat menempelkan metode ini di dalam suatu aktivitas atau fragmen.
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.
adalah bagian yang saya lewatkan - bisa jadi karena saya melakukannya dalam sebuah fragmen.