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?

War es hilfreich?

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

ClipboardManager API-Referenz

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 alten android.text.ClipboardManager zu importieren. Das Gleiche gilt für ClipData.
  • 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;

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top