265 votes

Comment copier du texte de manière programmatique dans mon application Android ?

Je construis une application Android et je veux copier la valeur du texte d'un widget EditText. Il est possible pour l'utilisateur d'appuyer sur Menu+A puis Menu+C pour copier la valeur, mais comment le faire de manière programmatique ?

1 votes

Gestionnaire de presse-papiers. developer.Android.com/reference/Android/content/

0 votes

Il s'agit essentiellement d'une question dupliquée de : stackoverflow.com/a/13517876/2116185

8voto

40-Love Points 1333

Voici du code pour implémenter des fonctions de copier/coller à partir de EditText (merci à Warpzit pour la vérification de la version). Vous pouvez les intégrer à 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());
        }
    }
}

7voto

Mor2 Points 41
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
if (clipboard == null || clip == null)
    return;
clipboard.setPrimaryClip(clip);

Et l'importation import android.content.ClipboardManager;

6voto

King of Masses Points 12228

Pour activer le copier/coller standard pour TextView, vous pouvez choisir l'une des options suivantes :

Modification du fichier de mise en page : ajoutez la propriété suivante à votre TextView

android:textIsSelectable="true"

Dans votre classe Java, écrivez cette ligne deux définir le grammaticalement.

myTextView.setTextIsSelectable(true);

En appuyant longuement sur le TextView, vous pouvez voir la barre d'action copier/coller.

4voto

Vijayakumar G Points 31

Pour Kotlin, nous pouvons utiliser la méthode suivante. Vous pouvez coller cette méthode à l'intérieur d'une activité ou d'un fragment.

fun copyToClipBoard(context: Context, message: String) {

    val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
    val clipData = ClipData.newPlainText("label",message)
    clipBoard.setPrimaryClip(clipData)

}

3voto

Trinity Points 436

@FlySwat a déjà donné la bonne réponse, je ne fais que partager la réponse complète :

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

label est une étiquette visible par l'utilisateur pour les données du clip et text est le texte réel du clip. D'après documents officiels .

Il est important d'utiliser cette importation :

import android.content.ClipboardManager;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X