ฉันกำลังสร้างแอพ 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
ในnewPlainText
? label User-visible label for the clip data.
รัฐ documentaion แต่เมื่อlabel
ผู้ใช้มองเห็นได้? ฉันควรใส่ค่า / ชื่อlabel
อะไร
Googling นำคุณไปสู่ android.content.ClipboardManager และคุณสามารถตัดสินใจได้อย่างที่ฉันทำคลิปบอร์ดนั้นไม่สามารถใช้ได้บน API API <11 เนื่องจากหน้าเอกสารอธิบายว่า "ตั้งแต่: ระดับ API 11"
จริงๆแล้วมีสองชั้นเรียนส่วนที่สองขยายเป็นครั้งแรก - 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
จับบล็อกสำหรับการวางข้อความเพราะหลายสิ่งที่สามารถ คุณสามารถตรวจสอบแต่ละรายการหากคุณพบวิธีที่สามารถอ่านได้หากต้องการเปิดใช้งานการคัดลอก / วางมาตรฐานสำหรับ TextView คุณสามารถเลือกหนึ่งในรายการต่อไปนี้:
เปลี่ยนไฟล์เลย์เอาต์: เพิ่มคุณสมบัติด้านล่างลงใน TextView ของคุณ
android:textIsSelectable="true"
ในคลาส Java ของคุณเขียนบรรทัดนี้สองตั้งไวยากรณ์
myTextView.setTextIsSelectable(true);
และกดแบบยาวบน TextView คุณจะเห็นแถบการคัดลอก / วาง
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
if (clipboard == null || clip == null)
return;
clipboard.setPrimaryClip(clip);
และนำเข้า import android.content.ClipboardManager;
@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.
เป็นส่วนหนึ่งที่ผมหายไป - อาจเป็นเพราะฉันทำมันภายในเศษ