Tôi đang xây dựng một ứng dụng Android và tôi muốn sao chép giá trị văn bản của tiện ích EditText. Người dùng có thể nhấn Menu+A
sau đó Menu+C
để sao chép giá trị, nhưng tôi sẽ làm điều này bằng cách lập trình như thế nào?
Tôi đang xây dựng một ứng dụng Android và tôi muốn sao chép giá trị văn bản của tiện ích EditText. Người dùng có thể nhấn Menu+A
sau đó Menu+C
để sao chép giá trị, nhưng tôi sẽ làm điều này bằng cách lập trình như thế nào?
Câu trả lời:
Sử dụng ClipboardManager#setPrimaryClip
phương pháp:
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
gì
Context context = getApplicationContext(); Toast.makeText(context, "text copied", Toast.LENGTH_LONG).show();
Vì vậy, mọi người đều đồng ý về cách thực hiện việc này, nhưng vì không ai muốn đưa ra một giải pháp hoàn chỉnh, nên đây:
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);
}
Tôi giả sử bạn có một cái gì đó như sau được khai báo trong bảng kê khai:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
label
trong newPlainText
phương pháp là gì? các tài liệu tuyên bố label User-visible label for the clip data.
. Nhưng khi nào label
người dùng có thể nhìn thấy? Và loại giá trị / tên nào tôi nên đặt vào label
?
Googling đưa bạn đến android.content.ClipboardManager và bạn có thể quyết định, như tôi đã làm, Clipboard đó không có sẵn trên API <11, vì trang tài liệu có nội dung "Kể từ: API cấp 11".
Thực tế, có hai lớp, lớp thứ hai mở rộng lớp thứ nhất - android.text.ClipboardManager và android.content.ClipboardManager.
android.text.ClipboardManager hiện có từ API 1, nhưng nó chỉ hoạt động với nội dung văn bản.
android.content.ClipboardManager là cách ưa thích để làm việc với clipboard, nhưng nó không khả dụng trên Cấp độ API <11 (Honeycomb).
Để có được bất kỳ trong số họ, bạn cần mã sau đây:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
Nhưng đối với API <11, bạn phải nhập android.text.ClipboardManager
và cho 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());
}
bạn có thể thử điều này ..
Dưới đây là một số mã để thực hiện một số chức năng sao chép và dán từ EditText (nhờ Warpzit để kiểm tra phiên bản). Bạn có thể kết nối chúng với sự kiện onclick của nút.
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());
}
}
}
Kể từ Android Oreo, thư viện hỗ trợ chỉ chuyển xuống API 14. Hầu hết các ứng dụng mới hơn có thể có API tối thiểu là 14 và do đó không cần phải lo lắng về các vấn đề với API 11 được đề cập trong một số câu trả lời khác. Rất nhiều mã có thể được làm sạch. (Nhưng hãy xem lịch sử chỉnh sửa của tôi nếu bạn vẫn hỗ trợ các phiên bản thấp hơn.)
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", selectedText);
if (clipboard == null || clip == null) return;
clipboard.setPrimaryClip(clip);
Tôi đang thêm mã này dưới dạng phần thưởng, vì sao chép / dán thường được thực hiện theo cặp.
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
try {
CharSequence text = clipboard.getPrimaryClip().getItemAt(0).getText();
} catch (Exception e) {
return;
}
android.content.ClipboardManager
phiên bản chứ không phải cũ android.text.ClipboardManager
. Giống vớiClipData
.context.getSystemService()
.null
. Bạn có thể kiểm tra từng cái nếu bạn thấy cách đó dễ đọc hơn.Để bật sao chép / dán tiêu chuẩn cho TextView, U có thể chọn một trong các tùy chọn sau:
Thay đổi tệp bố cục: thêm thuộc tính bên dưới vào TextView của bạn
android:textIsSelectable="true"
Trong lớp Java của bạn, viết dòng này, hai tập hợp ngữ pháp.
myTextView.setTextIsSelectable(true);
Và nhấn và giữ trên TextView, bạn có thể thấy thanh hành động sao chép / dán.
@FlySwat đã đưa ra câu trả lời đúng, tôi chỉ chia sẻ câu trả lời đầy đủ:
Sử dụng phương thức 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);
Đâu label
là nhãn người dùng có thể nhìn thấy cho dữ liệu clip và
text
là văn bản thực tế trong clip. Theo tài liệu chính thức .
Điều quan trọng là sử dụng nhập khẩu này:
import android.content.ClipboardManager;
Đây là mã làm việc của tôi
/**
* 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);
}
}
Đối với Kotlin, chúng ta có thể sử dụng phương pháp sau. Bạn có thể dán phương pháp này bên trong một hoạt động hoặc đoạn.
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.
tôi bị thiếu - có thể là do tôi đang thực hiện nó trong một đoạn.