كيف أنسخ النص برمجيًا في تطبيق Android الخاص بي؟

StackOverflow https://stackoverflow.com/questions/238284

  •  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);

ClipboardManager إشارة API

نصائح أخرى

لذلك يتفق الجميع على كيفية القيام بذلك، ولكن بما أنه لا أحد يرغب في تقديم حل كامل، فإليك ما يلي:

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" />

وغوغلينغ يجلب لك android.content.ClipboardManager وكنت قد تقرر، كما فعلت، أن الحافظة غير متوفرة على API <11، لأن صفحة وثائق تقول "منذ: 11 API مستوى".

وهناك بالفعل اثنين من الطبقات، ثانية واحدة تمديد أولا - android.text.ClipboardManager وandroid.content.ClipboardManager

وandroid.text.ClipboardManager والقائمة منذ API 1، لكنه يعمل فقط مع محتوى النص.

وandroid.content.ClipboardManager هي الطريقة المفضلة للعمل مع الحافظة، ولكنها ليست متوفرة على مستوى API <11 (قرص العسل).

لحصول أي منهم كنت في حاجة إلى التعليمات البرمجية التالية:

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) 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"

في الخاص بك جافا الطبقة كتابة هذا الخط اثنين تعيين نحويا.

وmyTextView.setTextIsSelectable(true);

والضغط لفترة طويلة على TextView ترون شريط عمل نسخ / لصق.

وFlySwat أعطى بالفعل الإجابة الصحيحة، أنا مجرد تقاسم إجابة كاملة:

استخدم ClipboardManager.setPrimaryClip ( http://developer.android.com/ المرجع / الروبوت / المحتوى / 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;
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

والاستيراد import android.content.ClipboardManager;

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top