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?
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:
import android.content.ClipboardManager;
// ...
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
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:
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 gehe davon aus, dass Sie so etwas wie Folgendes im Manifest deklariert haben:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
label
in der newPlainText
Methode ist? Die Dokumentation besagt label User-visible label for the clip data.
. Aber wann ist das label
für den Benutzer sichtbar? Und welche Art von Wert / Name soll ich eingeben label
?
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:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
Für API <11 müssen Sie jedoch importieren 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 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.
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());
}
}
}
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.)
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", selectedText);
if (clipboard == null || clip == null) return;
clipboard.setPrimaryClip(clip);
Ich füge diesen Code als Bonus hinzu, da das Kopieren / Einfügen normalerweise paarweise erfolgt.
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
try {
CharSequence text = clipboard.getPrimaryClip().getItemAt(0).getText();
} catch (Exception e) {
return;
}
android.content.ClipboardManager
Version und nicht die alte importieren android.text.ClipboardManager
. Gleiches gilt für ClipData
.context.getSystemService()
.null
. Sie können jeden einzelnen überprüfen, wenn Sie ihn auf diese Weise besser lesbar finden.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
android:textIsSelectable="true"
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.
@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 ):
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
Wo label
ist eine vom Benutzer sichtbare Beschriftung für die Clipdaten und
text
ist der tatsächliche Text im Clip. Nach offiziellen Angaben .
Es ist wichtig, diesen Import zu verwenden:
import android.content.ClipboardManager;
Hier ist mein Arbeitscode
/**
* Method to code text in clip board
*
* @param context context
* @param text text what wan to copy in clipboard
* @param label label what want to copied
*/
public static void copyCodeInClipBoard(Context context, String text, String label) {
if (context != null) {
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(label, text);
if (clipboard == null || clip == null)
return;
clipboard.setPrimaryClip(clip);
}
}
Für Kotlin können wir die folgende Methode verwenden. Sie können diese Methode in eine Aktivität oder ein Fragment einfügen.
fun copyToClipBoard(context: Context, message: String) {
val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("label",message)
clipBoard.setPrimaryClip(clipData)
}
context.
war der Teil, den ich vermisst habe - könnte sein, weil ich es innerhalb eines Fragments mache.