एंड्रॉइड में टेक्स्टव्यू के लिए मैं मानक कॉपी पेस्ट कैसे सक्षम करूं?


119

मैं एक TextView (EditText के समान) के लिए मानक कॉपी पेस्ट सक्षम करना चाहता हूं। मैं यह कैसे कर सकता हूं?

मैंने एक गैर-संपादन योग्य EditText का उपयोग करने की कोशिश की, लेकिन यह अच्छी तरह से काम नहीं करता था (कभी-कभी यह संपादन योग्य बन जाता था या कॉपी पेस्ट ओवरले नहीं दिखाया जाता था)। और यह आमतौर पर एक अच्छा दृष्टिकोण नहीं है।

एपीआई 7 पर काम करने वाले समाधान की आवश्यकता है।


है यह आप के लिए क्या देख रहे हैं?
जर्मिन बजाजियन

यह समान है, लेकिन समान नहीं है क्योंकि मैं सभी पाठ कॉपी करना चाहता हूं। लेकिन ऐसा ही दिखता है। समस्या यह है कि उत्तर केवल एपीआई 11 पर शुरू होता है और मुझे एपीआई 7. से कुछ काम करने की आवश्यकता होती है
Ixx

ClipboardManagerएपीआई 1 ( यहां देखें ) के बाद से उपलब्ध है । क्लिपबोर्ड पर कॉपी करने के लिए पॉपअप के साथ लंबे प्रेस के बारे में कैसे?
जर्मिन बजाजियन

@ जर्मिन हां, ऐसा लगता है कि मुझे एक कस्टम समाधान करना है।
Ixx

जवाबों:


226

कोशिश करो android:textIsSelectable

अर्थात, android:textIsSelectable="true"


क्या कोई इसे EditTextPreference के लिए कर सकता है?
पाउडर 366

1
@ पाउडर366: मुझे लगता है कि EditTextPreferenceपहले से ही कॉपी / पेस्ट का समर्थन करता है। यह निश्चित रूप से सेटिंग ऐप में लगता है।
कॉमन्सवेयर

वास्तव में यह एक बग है। मेरे सैमसंग 4.2.2 डिवाइस पर दिखाता है। Nexus7 और Nexus10 काम करता है। code.google.com/p/android/issues/detail?id=26008
powder366

बस इस पर ध्यान दें, यदि आपका पाठ दृश्य शुरू में छिपा हुआ है और आप इसे प्रोग्राम से सेटिविजिबिलिटी का उपयोग करके दिखा रहे हैं, तो आपको इस काम को करने के लिए textView.setTextIsSelectable (true) का उपयोग करने की आवश्यकता है। यह उस स्थिति में xml के माध्यम से काम नहीं करेगा।
प्रवीण सिंह

58

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

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

    android:textIsSelectable="true"

  2. अपने जावा क्लास में इस लाइन को प्रोग्रामेटिक रूप से सेट करने के लिए लिखें। myTextView.setTextIsSelectable(true);

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


1
मैं ऐसा ही करता हूँ। जैसा कि मैं ग्रंथों पर "कॉपी" और "अल का चयन करें" एल बटन के साथ टूलबार पर क्लिक करता हूं। लेकिन मैं उन्हें क्लिक करने के बाद कुछ नहीं होता। मैं क्या कर सकता हूँ?
मीना दाहेश

2
यह समाधान हरे चेकमार्क के साथ चिह्नित सही से बेहतर है।
एडम हर्विट्ज

21

यह पूर्व-हनीकॉम्ब की नकल के लिए काम करता है:

import android.text.ClipboardManager;

textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        ClipboardManager cm = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
        cm.setText(textView.getText());
        Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show();
    }
});

4
कॉमन्सवेयर के जवाब के साथ-साथ इसका इस्तेमाल करने के लिए एक अच्छी रणनीति होगी। android:textIsSelectableलेआउट में जीवन जोड़ने के बाद से , यह केवल निचले एपीआई स्तरों पर ध्यान नहीं दिया जाएगा। फिर Ixx के समाधान का उपयोग यदि एक स्टेटमेंट के भीतर किया जाए, तो यह देखने के लिए जांचें कि एपीआई स्तर 11 से नीचे है या नहीं। दोनों दुनिया के सर्वश्रेष्ठ। इसके बारे android:textIsSelectableमें अच्छी बात यह है कि यह आपको प्लेटफॉर्म के टेक्स्ट सिलेक्शन एक्शन बार देता है, और इसमें एक अच्छा देशी एहसास है।
एमिल 10001

1
क्लिपबोर्ड
मैनजर

1
हां, ठीक है, यह उत्तर 2 साल से अधिक समय से है। एक नए को संपादित करने या जोड़ने के लिए स्वतंत्र महसूस करें।
दिसंबर को Ixx

11

एपीआई 11 , अपडेटेड कोड की आवश्यकता है, पिछली विधि को हटा दिया गया है

बिना विषय पूर्ण स्क्रीन के समाधान ActionBar

TextViewनिम्नलिखित कोड में विस्तार और निर्माण पेस्ट करें

this.setOnLongClickListener(new OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                ClipboardManager cManager = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
                ClipData cData = ClipData.newPlainText("text", getText());
                cManager.setPrimaryClip(cData);
                Util.toast(mContext, string.text_copyed);
                return true;
            }
        });

9

Xml टेक्स्टव्यू में इस कोड को पेस्ट करें

android:textIsSelectable="true"

फिर जावा फ़ाइल में,

 final TextView txtcopypaste = findViewById(R.id.txtcopypaste); // my textview
    txtcopypaste.setOnClickListener(new View.OnClickListener() { // set onclick listener to my textview
        @Override
        public void onClick(View view) {
            ClipboardManager cm = (ClipboardManager)getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
            cm.setText(txtcopypaste.getText().toString());              
            Toast.makeText(getApplicationContext(), "Copied :)", Toast.LENGTH_SHORT).show();
        }
    });

आवश्यकता: उस टेक्स्ट को कॉपी और पेस्ट करना होगा जो टेक्स्टव्यू में है।

आउटकम: टेक्स्टव्यू का उपयोग करते हुए, एक बार मैंने टेक्स्टव्यू पर क्लिक किया। इसकी स्वचालित रूप से उस पाठ की प्रतिलिपि बनाई गई है जो टेक्स्टव्यू में है।

नोट: क्लिपबोर्डमैन आयात करते समय पसंद करने की कोशिश करें

कृपया टेक्स्ट क्लिपबोर्ड प्रबंधक को प्राथमिकता दें

import android.text.ClipboardManager; // prefer this 

सामग्री क्लिपबोर्ड प्रबंधक से बचने का प्रयास करें

import android.content.ClipboardManager; // Not this

3
  1. विषय का उपयोग करें

    @android:style/Theme.Black.NoTitleBar.Fullscreen

    या

    @android:style/Theme.WithActionBar
  2. Xml में TextView सेट करें

    android:textIsSelectable="true"
  3. परिणाम देखें


3

अगर कोई अतिरिक्त मील जाना चाहता है और एक क्लिक के साथ क्लिपबोर्ड पर चयन और कॉपी करना चाहता है:

 phone.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                            ClipData clip = ClipData.newPlainText("PhoneNumber", phone.getText());
                            clipboard.setPrimaryClip(clip);

                        }
                    });

फोन TextView और phone.Text पाठ है जिसे क्लिपबोर्ड पर कॉपी किया जाएगा।


0

यह बेहतर है:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
final android.content.ClipboardManager clipboardManager = (android.content.ClipboardManager) context
        .getSystemService(Context.CLIPBOARD_SERVICE);
final android.content.ClipData clipData = android.content.ClipData
        .newPlainText("text label", "text to clip");
clipboardManager.setPrimaryClip(clipData);
} else {
final android.text.ClipboardManager clipboardManager = (android.text.ClipboardManager) context
        .getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText("text to clip");
}

-2

एक के लिए EditText, प्रकट अंदर में गतिविधि उपयोग android:windowSoftInputMode="adjustResize"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.