163

Kann mir bitte jemand sagen, wie man den in einer bestimmten Textansicht vorhandenen Text in die Zwischenablage kopiert, wenn eine Taste gedrückt wird? Thanx :)Wie kopiere ich Text auf Clip Board in Android?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainpage); 
    textView = (TextView) findViewById(R.id.textview); 
    copyText = (Button) findViewById(R.id.bCopy); 
    copyText.setOnClickListener(new View.OnClickListener() { 


     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
      String getstring = textView.getText().toString(); 

      //Help to continue :) 





     } 
    }); 
} 

}

ich den Text in Textview Textview kopieren möchten in die Zwischenablage kopieren, wenn die Taste gedrückt wird bcopy! Bitte helfen ...

+0

Mögliches Duplikat von [Wie Text programmatisch in meinem Android-App kopieren?] (Http://stackoverflow.com/questions/238284/how-to-copy-text-programmatically-in-my-android -app) –

+0

https://stackoverflow.com/q/48791271/9274175 Bitte beantworten Sie diese Fragen auf coppy –

Antwort

290

Verwendung ClipboardManager

ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText(label, text); 
clipboard.setPrimaryClip(clip); 

stellen Sie sicher, android.content.ClipboardManager und NICHT android.text.ClipboardManager importiert haben. Letzteres ist veraltet. Überprüfen Sie diese link für weitere Informationen.

+3

Dies ist für API11 + funktioniert nur für GB und unter – Javier

+0

@zen Ich denke, Sie können "setText" für GB verwenden. –

+0

import 'android.content.ClipboardManager' und *** nicht ***' android.text.ClipboardManager' (Ich habe ''android.text.ClipboardManager' ist veraltet 'Warnung) – Atul

53

Gestern habe ich diese Klasse gemacht. Nehmen Sie es, es ist für alle API-Levels

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import android.annotation.SuppressLint; 
import android.content.ClipData; 
import android.content.ClipboardManager; 
import android.content.ContentResolver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.res.AssetFileDescriptor; 
import android.net.Uri; 
import android.util.Log; 
import de.lochmann.nsafirewall.R; 

public class MyClipboardManager { 

    @SuppressLint("NewApi") 
    @SuppressWarnings("deprecation") 
    public boolean copyToClipboard(Context context, String text) { 
     try { 
      int sdk = android.os.Build.VERSION.SDK_INT; 
      if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { 
       android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context 
         .getSystemService(context.CLIPBOARD_SERVICE); 
       clipboard.setText(text); 
      } else { 
       android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context 
         .getSystemService(context.CLIPBOARD_SERVICE); 
       android.content.ClipData clip = android.content.ClipData 
         .newPlainText(
           context.getResources().getString(
             R.string.message), text); 
       clipboard.setPrimaryClip(clip); 
      } 
      return true; 
     } catch (Exception e) { 
      return false; 
     } 
    } 

    @SuppressLint("NewApi") 
    public String readFromClipboard(Context context) { 
     int sdk = android.os.Build.VERSION.SDK_INT; 
     if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { 
      android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context 
        .getSystemService(context.CLIPBOARD_SERVICE); 
      return clipboard.getText().toString(); 
     } else { 
      ClipboardManager clipboard = (ClipboardManager) context 
        .getSystemService(Context.CLIPBOARD_SERVICE); 

      // Gets a content resolver instance 
      ContentResolver cr = context.getContentResolver(); 

      // Gets the clipboard data from the clipboard 
      ClipData clip = clipboard.getPrimaryClip(); 
      if (clip != null) { 

       String text = null; 
       String title = null; 

       // Gets the first item from the clipboard data 
       ClipData.Item item = clip.getItemAt(0); 

       // Tries to get the item's contents as a URI pointing to a note 
       Uri uri = item.getUri(); 

       // If the contents of the clipboard wasn't a reference to a 
       // note, then 
       // this converts whatever it is to text. 
       if (text == null) { 
        text = coerceToText(context, item).toString(); 
       } 

       return text; 
      } 
     } 
     return ""; 
    } 

    @SuppressLint("NewApi") 
    public CharSequence coerceToText(Context context, ClipData.Item item) { 
     // If this Item has an explicit textual value, simply return that. 
     CharSequence text = item.getText(); 
     if (text != null) { 
      return text; 
     } 

     // If this Item has a URI value, try using that. 
     Uri uri = item.getUri(); 
     if (uri != null) { 

      // First see if the URI can be opened as a plain text stream 
      // (of any sub-type). If so, this is the best textual 
      // representation for it. 
      FileInputStream stream = null; 
      try { 
       // Ask for a stream of the desired type. 
       AssetFileDescriptor descr = context.getContentResolver() 
         .openTypedAssetFileDescriptor(uri, "text/*", null); 
       stream = descr.createInputStream(); 
       InputStreamReader reader = new InputStreamReader(stream, 
         "UTF-8"); 

       // Got it... copy the stream into a local string and return it. 
       StringBuilder builder = new StringBuilder(128); 
       char[] buffer = new char[8192]; 
       int len; 
       while ((len = reader.read(buffer)) > 0) { 
        builder.append(buffer, 0, len); 
       } 
       return builder.toString(); 

      } catch (FileNotFoundException e) { 
       // Unable to open content URI as text... not really an 
       // error, just something to ignore. 

      } catch (IOException e) { 
       // Something bad has happened. 
       Log.w("ClippedData", "Failure loading text", e); 
       return e.toString(); 

      } finally { 
       if (stream != null) { 
        try { 
         stream.close(); 
        } catch (IOException e) { 
        } 
       } 
      } 

      // If we couldn't open the URI as a stream, then the URI itself 
      // probably serves fairly well as a textual representation. 
      return uri.toString(); 
     } 

     // Finally, if all we have is an Intent, then we can just turn that 
     // into text. Not the most user-friendly thing, but it's something. 
     Intent intent = item.getIntent(); 
     if (intent != null) { 
      return intent.toUri(Intent.URI_INTENT_SCHEME); 
     } 

     // Shouldn't get here, but just in case... 
     return ""; 
    } 

} 
+0

Können Sie die erforderlichen Importanweisungen hinzufügen, damit diese Klasse funktioniert? – merlin2011

+0

@ merlin2011 hat es getan, denke ich habe die coerceToText (...) Methode vergessen. Sry dafür –

+0

Was macht "coerceToText"? Ist es auch möglich, andere Datentypen in die Zwischenablage zu kopieren/einfügen (Beispiel: Bitmap)? –

10

Nur diese verwenden. Es funktioniert nur für Android api> = 11, bevor Sie eine ClipData verwenden müssen.

ClipboardManager _clipboard = (ClipboardManager) _activity.getSystemService(Context.CLIPBOARD_SERVICE); 
_clipboard.setText(YOUR TEXT); 

Hoffe, es half Ihnen

:)

[UPDATE 2015.03.19] Genau wie Ujjwal Singh sagte es das Verfahren setText jetzt veraltet ist, verwenden Sie sollten, so wie die docs es recommande, setPrimaryClip(clipData)

+0

Es zeigt einen Fehler _activity kann nicht gelöst werden. –

+1

Welcher Fehler genau? Kannst du es posten? – Ektos974

+0

"_activity kann nicht aufgelöst werden" –

6
@SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi" }) 
@SuppressWarnings("deprecation") 
@TargetApi(11) 
public void onClickCopy(View v) { // User-defined onClick Listener 
    int sdk_Version = android.os.Build.VERSION.SDK_INT; 
    if(sdk_Version < android.os.Build.VERSION_CODES.HONEYCOMB) { 
     android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); 
     clipboard.setText(textView.getText().toString()); // Assuming that you are copying the text from a TextView 
     Toast.makeText(getApplicationContext(), "Copied to Clipboard!", Toast.LENGTH_SHORT).show(); 
    } 
    else { 
     android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); 
     android.content.ClipData clip = android.content.ClipData.newPlainText("Text Label", textView.getText().toString()); 
     clipboard.setPrimaryClip(clip); 
     Toast.makeText(getApplicationContext(), "Copied to Clipboard!", Toast.LENGTH_SHORT).show(); 
    } 
} 
41

Hier ist die Methode Text kopieren in die Zwischenablage kopieren:

private void setClipboard(Context context, String text) { 
    if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { 
    android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); 
    clipboard.setText(text); 
    } else { 
    android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); 
    android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", text); 
    clipboard.setPrimaryClip(clip); 
    } 
} 

Diese Methode funktioniert auf allen Android-Geräten.

+1

Ich verstehe nicht, was mit" Kontext "bedeuten. Können Sie ein Beispiel hinzufügen, wie diese Methode richtig aufgerufen wird? Vielen Dank. –

+1

Es sieht auch so aus, als ob der Wert von "context" nicht verwendet wird. Also warum muss es als Parameter übergeben werden? –

+0

@E_Blue danke für die Antwort, ich bearbeite jetzt – vuhung3990

5

Verwendung dieser Code

private ClipboardManager myClipboard; 
    private ClipData myClip; 
    TextView textView; 
    Button copyText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainpage); 
    textView = (TextView) findViewById(R.id.textview); 
    copyText = (Button) findViewById(R.id.bCopy); 
    myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); 

    copyText.setOnClickListener(new View.OnClickListener() { 


     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


      String text = textView.getText().toString(); 
      myClip = ClipData.newPlainText("text", text); 
      myClipboard.setPrimaryClip(myClip); 
      Toast.makeText(getApplicationContext(), "Text Copied", 
      Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
+0

Vielen Dank, es ist sehr einfach zu bedienen. – kdblue

5

Verwendung dieser Funktion für die Zwischenablage kopieren

public void copyToClipboard(String copyText) { 
    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(copyText); 
    } else { 
     android.content.ClipboardManager clipboard = (android.content.ClipboardManager) 
       getSystemService(Context.CLIPBOARD_SERVICE); 
     android.content.ClipData clip = android.content.ClipData 
       .newPlainText("Your OTP", copyText); 
     clipboard.setPrimaryClip(clip); 
    } 
    Toast toast = Toast.makeText(getApplicationContext(), 
      "Your OTP is copied", Toast.LENGTH_SHORT); 
    toast.setGravity(Gravity.BOTTOM | Gravity.RIGHT, 50, 50); 
    toast.show(); 
    //displayAlert("Your OTP is copied"); 
} 
+0

Es funktioniert für mich. Sehr einfach und sauber, Danke –

0

int sdk = android.os.Build.VERSION.SDK_INT;

if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { 
     android.text.ClipboardManager clipboard = (android.text.ClipboardManager) DetailView.this 
       .getSystemService(Context.CLIPBOARD_SERVICE); 
     clipboard.setText("" + yourMessage.toString()); 
     Toast.makeText(AppCstVar.getAppContext(), 
       "" + getResources().getString(R.string.txt_copiedtoclipboard), 
       Toast.LENGTH_SHORT).show(); 
    } else { 
     android.content.ClipboardManager clipboard = (android.content.ClipboardManager) DetailView.this 
       .getSystemService(Context.CLIPBOARD_SERVICE); 
     android.content.ClipData clip = android.content.ClipData 
       .newPlainText("message", "" + yourMessage.toString()); 
     clipboard.setPrimaryClip(clip); 
     Toast.makeText(AppCstVar.getAppContext(), 
       "" + getResources().getString(R.string.txt_copiedtoclipboard), 
       Toast.LENGTH_SHORT).show(); 
    }