Ich erstelle eine Android-App und möchte den Textwert eines EditText-Widgets kopieren. Es ist für den Benutzer möglich, Menu+A
dann zu drücken, Menu+C
um den Wert zu kopieren, aber wie würde ich dies programmgesteuert tun?
231
Ich erstelle eine Android-App und möchte den Textwert eines EditText-Widgets kopieren. Es ist für den Benutzer möglich, Menu+A
dann zu drücken, Menu+C
um den Wert zu kopieren, aber wie würde ich dies programmgesteuert tun?
Antworten:
Verwendung
ClipboardManager#setPrimaryClip
Methode:ClipboardManager
API-Referenzquelle
import android.content.ClipboardManager;
label
?Context context = getApplicationContext(); Toast.makeText(context, "text copied", Toast.LENGTH_LONG).show();
Alle sind sich einig, wie dies getan werden soll, aber da niemand eine vollständige Lösung geben möchte, geht es weiter:
Ich gehe davon aus, dass Sie so etwas wie Folgendes im Manifest deklariert haben:
quelle
label
in dernewPlainText
Methode ist? Die Dokumentation besagtlabel User-visible label for the clip data.
. Aber wann ist daslabel
für den Benutzer sichtbar? Und welche Art von Wert / Name soll ich eingebenlabel
?Durch Googeln gelangen Sie zu android.content.ClipboardManager, und Sie können wie ich entscheiden, dass die Zwischenablage für API <11 nicht verfügbar ist, da auf der Dokumentationsseite "Seit: API Level 11" steht.
Es gibt tatsächlich zwei Klassen, die zweite erweitert die erste - android.text.ClipboardManager und android.content.ClipboardManager.
android.text.ClipboardManager ist seit API 1 vorhanden, funktioniert jedoch nur mit Textinhalten.
android.content.ClipboardManager ist die bevorzugte Methode zum Arbeiten mit der Zwischenablage, ist jedoch auf API-Ebene <11 (Honeycomb) nicht verfügbar.
Um einen von ihnen zu erhalten, benötigen Sie den folgenden Code:
Für API <11 müssen Sie jedoch importieren
android.text.ClipboardManager
und für API> = 11android.content.ClipboardManager
quelle
Sie können dies versuchen ..
quelle
Hier ist ein Code zum Implementieren einiger Funktionen zum Kopieren und Einfügen von EditText (danke an Warpzit für die Versionsprüfung). Sie können diese mit dem Onclick-Ereignis Ihrer Schaltfläche verknüpfen.
quelle
Update der Android-Unterstützungsbibliothek
Ab Android Oreo ist die Support-Bibliothek nur auf API 14 beschränkt. 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
Einfügen
Ich füge diesen Code als Bonus hinzu, da das Kopieren / Einfügen normalerweise paarweise erfolgt.
Anmerkungen
android.content.ClipboardManager
Version und nicht die alte importierenandroid.text.ClipboardManager
. Gleiches gilt fürClipData
.context.getSystemService()
.null
. Sie können jeden einzelnen überprüfen, wenn Sie ihn auf diese Weise besser lesbar finden.quelle
Um das Standard-Kopieren / Einfügen für TextView zu aktivieren, kann U eine der folgenden Optionen auswählen:
Änderung in der Layoutdatei: Fügen Sie Ihrer TextView die folgende Eigenschaft hinzu
Schreiben Sie in Ihrer Java-Klasse diese Zeile zwei und legen Sie die Grammatik fest.
myTextView.setTextIsSelectable(true);
Wenn Sie lange auf die Textansicht drücken, wird die Aktionsleiste zum Kopieren / Einfügen angezeigt.
quelle
Und importieren
import android.content.ClipboardManager;
quelle
@FlySwat hat bereits die richtige Antwort gegeben, ich teile nur die vollständige Antwort:
Verwenden Sie die Methode ClipboardManager.setPrimaryClip ( http://developer.android.com/reference/android/content/ClipboardManager.html ):
Wo
label
ist eine vom Benutzer sichtbare Beschriftung für die Clipdaten undtext
ist der tatsächliche Text im Clip. Nach offiziellen Angaben .Es ist wichtig, diesen Import zu verwenden:
quelle
Hier ist mein Arbeitscode
quelle
Für Kotlin können wir die folgende Methode verwenden. Sie können diese Methode in eine Aktivität oder ein Fragment einfügen.
quelle
context.
war der Teil, den ich vermisst habe - könnte sein, weil ich es innerhalb eines Fragments mache.