मेरे एंड्रॉइड ऐप में टेक्स्ट प्रोग्राम को कॉपी कैसे करें?


231

मैं एक Android ऐप बना रहा हूं और मैं एक EditText विजेट के टेक्स्ट मान को कॉपी करना चाहता हूं। यह प्रेस करने के लिए उपयोगकर्ता के लिए संभव है Menu+Aतो Menu+Cमान की प्रतिलिपि करने के लिए है, लेकिन मैं कैसे इस प्रोग्राम के रूप में करना होगा?


1
ClipboardManager। डेवलपर
.android.com

यह मूल रूप से एक डुप्लिकेट प्रश्न है: stackoverflow.com/a/13517876/2116185
user2116185

जवाबों:


419

उपयोग ClipboardManager#setPrimaryClipविधि:

import android.content.ClipboardManager;

// ...

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

ClipboardManager एपीआई संदर्भ


7
इस्तेमाल करेंimport android.content.ClipboardManager;
मथुअसजार्डीबी

क्या यह फ़ंक्शन API 11+ (लॉलीपॉप सहित) पर काम करता है या नहीं?
अशरफ अलशावी

22
क्या है label?
आल्हा एम।

क्या क्लिप ट्रे के बिना ऐसा करने का कोई तरीका है ? (एलजी जी ४ एस ५.१.१)
आल्हा एम।

2
आप पाठ को कॉपी करने के लिए उपयोगकर्ता को बताने के लिए कॉपी करने के बाद सफलता संदेश भी जोड़ सकते हैंContext context = getApplicationContext(); Toast.makeText(context, "text copied", Toast.LENGTH_LONG).show();
Shady Sherif

217

तो हर कोई इस बात पर सहमत है कि यह कैसे किया जाना चाहिए, लेकिन चूंकि कोई भी संपूर्ण समाधान नहीं देना चाहता है, यहां यह है:

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

यह काम नहीं करता है, क्योंकि कंपाइलर एक त्रुटि फेंकता है: कॉल के लिए API स्तर 11 (वर्तमान मिनट 7 है) की आवश्यकता होती है: android.content.ClipboardManager # setPrimaryClip लाइन 245 Android Lint समस्या।
जावारनर

2
क्या आपने अपने प्रदर्शन में लक्ष्य और मिनट जोड़ दिए? यदि हाँ लिंट चेतावनी को अक्षम करें।
वारपजीत

4
अपनी विधि @SuppressLint ({"NewApi", "NewApi", "NewApi", "NewApi"}, @SuppressWarnings ("deprecation"), @TargetApi (11) ........ के ऊपर 3 पंक्तियाँ जोड़ें। यह मैंने क्या किया, और यह काम करता है।
आरआरटीडब्ल्यू

2
क्या कोई मुझे बता सकता है कि वास्तव labelमें newPlainTextविधि का उपयोग क्या है ? डॉक्यूमेंटेशन में कहा गया है label User-visible label for the clip data.। लेकिन labelउपयोगकर्ता को कब दिखाई देता है? और मुझे किस तरह का मूल्य / नाम देना चाहिए label?
16:59 पर shadyinside

@tannerjohn मेरा अनुमान है कि यह किसी प्रकार का पूर्वावलोकन है जिसका उपयोग कहीं न कहीं किया जाता है। लेकिन मुझे नहीं पता कि कहां। लेकिन आप सिर्फ एक ही पाठ को दो बार इस्तेमाल कर सकते हैं ...
Warpzit

15

Googling आपको android.content.ClipboardManager पर लाता है और आप तय कर सकते हैं, जैसा कि मैंने किया, कि क्लिपबोर्ड API <11 पर उपलब्ध नहीं है, क्योंकि प्रलेखन पृष्ठ "चूंकि: एपीआई स्तर 11" कहता है।

वास्तव में दो वर्ग हैं, दूसरा पहला - android.text.ClipboardManager और android.content.ClipboardManager का विस्तार।

android.text.ClipboardManager एपीआई 1 के बाद से मौजूद है, लेकिन यह केवल पाठ सामग्री के साथ काम करता है।

android.content.ClipboardManager क्लिपबोर्ड के साथ काम करने का पसंदीदा तरीका है, लेकिन यह एपीआई स्तर <11 (हनीकॉम्ब) पर उपलब्ध नहीं है।

उनमें से किसी को पाने के लिए आपको निम्नलिखित कोड की आवश्यकता होगी:

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

लेकिन API <11 के लिए आपको आयात करना होगा android.text.ClipboardManagerऔर API> = 11 के लिए android.content.ClipboardManager


14
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());
}

आप इस कोशिश कर सकते हैं ..


8

एडिटटेक्स्ट से कुछ कॉपी और पेस्ट फ़ंक्शंस को लागू करने के लिए कुछ कोड यहां दिए गए हैं (संस्करण की जांच के लिए वारपज़िट के लिए धन्यवाद)। आप इन्हें अपने बटन के ऑनक्लिक ईवेंट पर हुक कर सकते हैं।

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());
        }
    }
}

एंड्रॉइड के कॉपी / पेस्ट / कट तरीकों को कॉल करना संभव नहीं है जैसे आप उन्हें लिख रहे हैं? मैंने उपयोगकर्ता के लिए कार्यक्षमता के साथ एक कस्टम टेक्स्ट-सेलेक्शन टूलबार बनाया, जो चयनित टेक्स्ट को बोल्ड / इटैलिक / अंडरलाइन आदि करने में सक्षम हो, लेकिन कस्टमाइज़ेशन के बाद, डिफ़ॉल्ट फ़ंक्शंस कॉपी / पेस्ट / कट काम नहीं करते हैं, लेकिन इसके लिए आइकन वे अभी भी दिखाई देते हैं?

के लिए "WordKeeper" क्या है?
एंड्रॉयड डेवलपर

7

Android समर्थन पुस्तकालय अद्यतन

Android Oreo के रूप में, समर्थन लाइब्रेरी केवल API 14. तक जाती है। अधिकांश नए ऐप्स में संभवतः 14 मिनट की न्यूनतम API भी होती है, और इस प्रकार कुछ अन्य उत्तरों में उल्लिखित 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। आप हर एक की जाँच कर सकते हैं यदि आप इस तरह से अधिक पठनीय पाते हैं।

1
के लिए "टेक्स्ट लेबल" क्या है?
एंड्रॉइड डेवलपर

@androiddeveloper, मैंने वास्तव में किसी भी चीज़ के लिए लेबल का उपयोग नहीं किया है, लेकिन इस प्रश्नोत्तर को देखें ।
सुरागाच

भले ही यह कहता है कि यह उपयोगकर्ताओं के लिए दृश्यमान है, यह वास्तव में नहीं है, और डेवलपर्स पर निर्भर करता है कि यदि आवश्यक हो तो इसका उपयोग करें।
एंड्रॉइड डेवलपर

5

TextView के लिए मानक कॉपी / पेस्ट को सक्षम करने के लिए, U निम्नलिखित में से एक चुन सकता है:

लेआउट फ़ाइल में बदलें: अपने टेक्स्ट दृश्य में नीचे की संपत्ति जोड़ें

android:textIsSelectable="true"

अपने जावा क्लास में इस लाइन को व्याकरणिक रूप से दो सेट लिखें।

myTextView.setTextIsSelectable(true);

और TextView पर लंबे समय तक प्रेस आप कॉपी / पेस्ट एक्शन बार देख सकते हैं।


5
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;


3

@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;

आप कॉपी पेस्ट क्यों करते हैं? लेबल क्या है?
एलेक्सज

@AlexS जैसा कि मैंने कहा, एक अन्य मित्र ने पहले ही एक सही उत्तर दिया, मैं अभी और अधिक विवरण के साथ एक और तरीका पोस्ट कर रहा हूं, मुझे लगता है कि यह किसी के लिए उपयोगी होगा
ट्रिनिटी

1

यहाँ मेरा काम कोड है

/**
 * 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);

    }
}

जब यू ने एक कोड साझा किया, तो उसे समझाने की कोशिश करें। आप एक प्रश्न का उत्तर देने के लिए यात्रा कर सकते हैं ।
यूनुस टेमुरलेनक

@YunusTemurlenk आपके सुझावों के लिए धन्यवाद, अगली बार मैं अपने जवाबों को एक विवरण के साथ संपादित करूंगा
मेहुल बोगरा

1

कोटलिन के लिए, हम निम्नलिखित विधि का उपयोग कर सकते हैं। आप इस विधि को किसी गतिविधि या टुकड़े के अंदर चिपका सकते हैं।

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.हो सकता है क्योंकि मैं इसे एक टुकड़ा के भीतर कर रहा हूँ - भाग मुझे याद आ रहा था।
कुल्लू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.