Wie Text programmatisch in meinem Android-App kopieren?
-
04-07-2019 - |
Frage
Ich baue eine Android-App, und ich möchte den Textwert eines EditText Widget kopieren. Es ist möglich, dass der Benutzer Menu+A
drückt dann Menu+C
den Wert zu kopieren, aber wie würde ich tun programmatisch das?
Lösung
Verwenden Sie ClipboardManager#setPrimaryClip
Methode:
import android.content.ClipboardManager;
// ...
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
Andere Tipps
So kann jeder darin übereinstimmen, wie dies geschehen soll, aber da niemand eine komplette Lösung geben möchten, hier geht:
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 so etwas wie im Manifest erklärt Folgendes:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
Googeln bringt Sie zu android.content.ClipboardManager und Sie könnten entscheiden, wie ich, dass Zwischenablage auf API nicht verfügbar ist <11, weil die Dokumentation Seite sagt: „Seit: API Stufe 11“.
Es gibt tatsächlich zwei Klassen, zweite Verlängerung der ersten -. Android.text.ClipboardManager und android.content.ClipboardManager
android.text.ClipboardManager existiert seit API 1, aber es funktioniert nur mit Textinhalt.
android.content.ClipboardManager ist die bevorzugte Art und Weise mit der Zwischenablage zu arbeiten, aber es ist nicht auf dem API-Ebene <11 (Honeycomb).
Um eine von ihnen Sie den folgenden Code benötigen:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
Aber für API <11 Sie haben android.text.ClipboardManager
zu importieren 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 versuchen, diese ..
Hier ist ein Code einige Funktionen Kopieren und Einfügen von EditText zu implementieren (Danke für Versionsprüfung Warpzit). Sie können diese auf Ihre Schaltfläche Onclick Ereignis 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());
}
}
}
Android Support-Bibliothek update
Wie der Android Oreo, nur die Support-Bibliothek geht bis auf API 14. Die meisten neueren Anwendungen wahrscheinlich auch eine min API von 14, und somit müssen nicht über die Probleme mit API 11 in einigen der anderen erwähnten Sorgen Antworten. Ein großer Teil des Code kann bis zu reinigen. (Aber meine bearbeiten Geschichte sehen, ob Sie noch niedrigere Versionen zu 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, weil Kopieren / Einfügen in der Regel paarweise durchgeführt wird.
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
try {
CharSequence text = clipboard.getPrimaryClip().getItemAt(0).getText();
} catch (Exception e) {
return;
}
Notizen
- Seien Sie sicher, dass die
android.content.ClipboardManager
Version anstatt der altenandroid.text.ClipboardManager
zu importieren. Das Gleiche gilt fürClipData
. - Wenn Sie nicht in einer Aktivität sind, können Sie den Dienst mit
context.getSystemService()
erhalten. - benutzte ich einen try / catch-Block für die Paste Text bekommen, weil mehrere Dinge
null
werden kann. Sie können jeder überprüfen, ob Sie auf diese Weise besser lesbar finden.
Um die Standard-copy / paste für Textview zu aktivieren, U eine der folgenden Möglichkeiten wählen:
Ändern in Layout-Datei: Fügen Sie unter Eigenschaft auf Ihre Textview
android:textIsSelectable="true"
In Ihrer Java-Klasse schreibt diese Zeilen zwei gesetzt die grammatisch.
myTextView.setTextIsSelectable(true);
Und langer Druck auf der Textview Sie Kopieren / Einfügen Aktionsleiste sehen können.
@FlySwat gab bereits die richtige Antwort, ich bin nur die vollständige Antwort zu teilen:
Verwenden ClipboardManager.setPrimaryClip ( http://developer.android.com/ Referenz / android / content / ClipboardManager.html ) Methode:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
Wo label
ist ein Benutzer sichtbaren Label für die Clip-Daten und
text
ist der eigentliche Text im Clip. Nach offizielle Dokumente .
Es ist wichtig, diesen Import zu verwenden:
import android.content.ClipboardManager;
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
Und Import import android.content.ClipboardManager;