Question

Je construis une application Android et je veux copier la valeur de texte d'un widget EditText. Il est possible pour l'utilisateur d'appuyer sur Menu+A puis sur Menu+C pour copier la valeur, mais comment procéderais-je par programmation?

Était-ce utile?

La solution

Utilisez la ClipboardManager#setPrimaryClip . :

import android.content.ClipboardManager;

// ...

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

ClipboardManager Référence de l'API

Autres conseils

Donc, tout le monde est d’accord sur la manière de procéder, mais comme personne ne veut donner une solution complète, voici:

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

Je suppose que vous avez quelque chose comme suit déclaré dans le manifeste:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />

Google vous amène sur android.content.ClipboardManager et vous pouvez décider, comme je l'ai fait, que Clipboard n'est pas disponible sur l'API < 11, car la page de documentation indique & Quot; Depuis: API niveau 11 & Quot;.

.

Il existe en fait deux classes, la seconde étendant la première - android.text.ClipboardManager et android.content.ClipboardManager.

android.text.ClipboardManager existe depuis l'API 1, mais il ne fonctionne qu'avec du contenu texte.

android.content.ClipboardManager est le moyen privilégié de travailler avec le presse-papiers, mais il n’est pas disponible au niveau de l’API < 11 (nid d'abeille).

Pour en obtenir un, vous avez besoin du code suivant:

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

Mais pour API < 11 vous devez importer android.text.ClipboardManager et pour API & Gt; = 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());
}

vous pouvez essayer ceci ..

Voici du code pour implémenter des fonctions copier-coller depuis EditText (merci à Warpzit pour le contrôle de version). Vous pouvez les relier à l'événement onclick de votre bouton.

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

Mise à jour de la bibliothèque de support Android

Depuis Android Oreo, la bibliothèque de support n’est que l’API 14. La plupart des applications les plus récentes ont probablement aussi une API minimale de 14, et n’ont donc pas à s’inquiéter des problèmes liés à l’API 11 mentionnés dans certains autres. réponses. Une grande partie du code peut être nettoyée. (Mais consultez mon historique des modifications si vous continuez à prendre en charge les versions inférieures.)

Copier

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

Coller

J'ajoute ce code en bonus, car copier / coller se fait généralement par paires.

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

Notes

  • Assurez-vous d'importer la version android.content.ClipboardManager plutôt que l'ancienne android.text.ClipboardManager. Pareil pour ClipData.
  • Si vous ne participez pas à une activité, vous pouvez obtenir le service avec context.getSystemService().
  • J'ai utilisé un bloc try / catch pour obtenir le texte collé car plusieurs éléments peuvent être null. Vous pouvez vérifier chacun d'eux si vous le trouvez plus lisible.

Pour activer le copier / coller standard pour TextView, vous pouvez choisir l’un des choix suivants:

Modification du fichier de présentation: ajoutez la propriété ci-dessous à votre TextView

android:textIsSelectable="true"

Dans votre classe Java, écrivez cette ligne deux fois la grammaire.

myTextView.setTextIsSelectable(true);

Appuyez longuement sur le TextView pour voir la barre d’action copier / coller.

@FlySwat a déjà donné la bonne réponse, je partage simplement la réponse complète:

Utilisez ClipboardManager.setPrimaryClip ( http://developer.android.com/ reference / android / content / ClipboardManager.html ) méthode:

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip); 

label est une étiquette visible par l'utilisateur pour les données du clip et text est le texte actuel du clip. Selon documents officiels .

Il est important d'utiliser cette importation:

import android.content.ClipboardManager;
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

Et importer import android.content.ClipboardManager;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top