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 Menu+C
pour copier la valeur, mais comment procéderais-je par programme?
Utilisation ClipboardManager#setPrimaryClip
méthode:
import Android.content.ClipboardManager;
// ...
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
Donc, tout le monde est d’accord sur la façon dont cela devrait être fait, mais puisque 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 manifeste:
<uses-sdk Android:minSdkVersion="7" Android:targetSdkVersion="14" />
Googling vous amène à 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 "Depuis: API niveau 11".
Il y a en fait deux classes, la seconde prolongeant 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 (Honeycomb).
Pour en obtenir, 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> = 11Android.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 ça ..
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());
}
}
}
À partir de Android Oreo, la bibliothèque de support n’appartient qu’à l’API 14. La plupart des applications les plus récentes ont probablement une API minimale de 14, et n’ont donc pas à s’inquiéter des problèmes liés à l’API 11. mentionné dans certaines des autres réponses. Une grande partie du code peut être nettoyée (mais voyez mon historique de montage si vous supportez toujours des versions plus basses.)
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", selectedText);
if (clipboard == null) return;
clipboard.setPrimaryClip(clip);
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;
}
Android.content.ClipboardManager
Plutôt que l'ancien Android.text.ClipboardManager
. Même chose pour ClipData
.context.getSystemService()
.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’une des options suivantes:
Modification du fichier de mise en page: ajoutez la propriété ci-dessous à votre TextView
Android:textIsSelectable="true"
Dans votre Java classe, écrivez cette ligne, deux fois la valeur grammaticale.
myTextView.setTextIsSelectable(true);
Et appuyez longuement sur le TextView pour voir la barre d’action copier/coller.
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
et importerimport Android.content.ClipboardManager;
@FlySwat a déjà donné la bonne réponse, je partage simplement la réponse complète:
Utilisez la méthode 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);
Où label
est une étiquette visible par l'utilisateur pour les données du clip et text
est le texte réel du clip. Selon document officiel .
Il est important d'utiliser cette importation:
import Android.content.ClipboardManager;