Wie programmiere Text programmatisch in meiner Android App?

Ich baue eine Android-App und möchte den Textwert eines EditText-Widgets kopieren. Es ist möglich, dass der Benutzer Menu+A dann Menu+C drückt, um den Wert zu kopieren, aber wie würde ich das programmatisch machen?

Solutions Collecting From Web of "Wie programmiere Text programmatisch in meiner Android App?"

Verwenden ClipboardManager#setPrimaryClip Methode 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-Referenz

So sind sich alle einig darüber, wie das gemacht werden sollte, aber da niemand eine komplette Lösung geben möchte, hier:

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

Ich nehme an, Sie haben etwas wie folgt in Manifest deklariert:

  

Googling bringt Sie zum android.content.ClipboardManager und Sie können entscheiden, dass Clipboard nicht auf API <11 verfügbar ist, da auf der Dokumentationsseite "Since: API Level 11" steht.

Es gibt tatsächlich zwei classn, die zweite erweitert den ersten – android.text.ClipboardManager und android.content.ClipboardManager.

android.text.ClipboardManager existiert seit API 1, funktioniert aber nur mit Textinhalt.

android.content.ClipboardManager ist der bevorzugte Weg, um mit der Zwischenablage zu arbeiten, aber es ist nicht verfügbar auf API Level <11 (Honeycomb).

Um einen von ihnen zu erhalten, benötigen Sie den folgenden Code:

 ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 

Aber für API <11 müssen Sie android.text.ClipboardManager und für 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()); } 

Sie können dies versuchen ..

Hier ist ein Code, um einige functionen zum Kopieren und Einfügen von EditText zu implementieren (dank Warpzit für die Versionskontrolle). Sie können diese mit dem onclick-Ereignis Ihrer Schaltfläche verknüpfen.

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

Um das standardmäßige Kopieren / Einfügen für TextView zu aktivieren, kann U eine der folgenden Optionen auswählen:

Ändern Sie die Layout-Datei: Fügen Sie die unten stehende Eigenschaft zu Ihrem TextView hinzu

 android:textIsSelectable="true" 

In deiner Java-class schreibe diese Zeile zwei grammatikalisch fest.

myTextView.setTextIsSelectable(true);

Und lange auf die TextView drücken, können Sie die Kopier- / Einfüge-Aktionsleiste sehen.

@FlySwat gab bereits die richtige Antwort, ich teile nur die komplette Antwort:

Verwenden Sie die Methode 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); 

Wobei label eine für den Benutzer sichtbare Beschriftung für die Clipdaten ist und text der tatsächliche Text im Clip ist. Laut offiziellen Unterlagen .

Es ist wichtig, diesen Import zu verwenden:

 import android.content.ClipboardManager; 

Aktualisierung der Android-Supportbibliothek

Ab Android Oreo geht die Support-Bibliothek nur auf API 14 zurück. Die meisten neueren Apps haben wahrscheinlich auch eine Mindest-API von 14 und müssen sich daher nicht um die Probleme mit API 11 kümmern, die in einigen der anderen Antworten erwähnt werden. Ein Großteil des Codes kann bereinigt werden. (Aber siehe meinen Bearbeitungsverlauf, wenn Sie noch niedrigere Versionen unterstützen.)

Kopieren

 ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("label", selectedText); if (clipboard == null) return; clipboard.setPrimaryClip(clip); 

Einfügen

Ich füge diesen Code als Bonus hinzu, weil Copy / Paste normalerweise in Paaren erfolgt.

 ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); try { CharSequence text = clipboard.getPrimaryClip().getItemAt(0).getText(); } catch (Exception e) { return; } 

Anmerkungen

  • android.content.ClipboardManager Sie sicher, dass Sie die android.content.ClipboardManager Version und nicht den alten android.text.ClipboardManager . Gleiches für ClipData .
  • Wenn Sie sich nicht in einer Aktivität befinden, können Sie den Dienst mit context.getSystemService() .
  • Ich habe einen try / catch-Block benutzt, um den Paste-Text zu bekommen, weil mehrere Dinge null . Sie können jede einzelne überprüfen, wenn Sie auf diese Weise besser lesbar sind.