Je veux activer le copier-coller standard pour un TextView (le même que pour EditText). Comment puis-je le faire?
J'ai essayé d'utiliser un EditText non éditable mais cela n'a pas bien fonctionné (il est parfois devenu éditable ou la superposition de copier-coller n'était pas affichée). Et ce n'est probablement pas une bonne approche en général.
Besoin d'une solution de travail à partir de l'API 7.
Cela fonctionne pour la copie pré-Honeycomb:
import Android.text.ClipboardManager;
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ClipboardManager cm = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
cm.setText(textView.getText());
Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show();
}
});
Essayez Android:textIsSelectable
.
c'est-à-dire Android:textIsSelectable="true"
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 classe Java, écrivez cette ligne pour la définir par programme. myTextView.setTextIsSelectable(true);
Et appuyez longuement sur le TextView pour voir la barre d’action copier/coller.
Requiert l'API 11 , code mis à jour, la méthode précédente est obsolète
Solution pour thème plein écran sansActionBar
Étendre TextView
et en constructeur coller le code suivant
this.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ClipboardManager cManager = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData cData = ClipData.newPlainText("text", getText());
cManager.setPrimaryClip(cData);
Util.toast(mContext, string.text_copyed);
return true;
}
});
utiliser le thème
@Android:style/Theme.Black.NoTitleBar.Fullscreen
ou
@Android:style/Theme.WithActionBar
définir TextView en XML
Android:textIsSelectable="true"
voir résultat
En XML TextView coller ce code
Android:textIsSelectable="true"
Puis en fichier Java,
final TextView txtcopypaste = findViewById(R.id.txtcopypaste); // my textview
txtcopypaste.setOnClickListener(new View.OnClickListener() { // set onclick listener to my textview
@Override
public void onClick(View view) {
ClipboardManager cm = (ClipboardManager)getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
cm.setText(txtcopypaste.getText().toString());
Toast.makeText(getApplicationContext(), "Copied :)", Toast.LENGTH_SHORT).show();
}
});
Condition: Besoin de copier et coller le texte qui se trouve dans la vue texte.
OutCome: Utilisation de textview, une fois que j'ai cliqué sur le textview. Sa copie automatiquement le texte qui se trouve dans la vue texte.
Remarque: Lors de l'importation de clipboardmanager, essayez de préférer
S'il vous plaît préférez gestionnaire de presse-papiers de texte
import Android.text.ClipboardManager; // prefer this
essayez d'éviter le gestionnaire de presse-papiers de contenu
import Android.content.ClipboardManager; // Not this
this est meilleur:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
final Android.content.ClipboardManager clipboardManager = (Android.content.ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
final Android.content.ClipData clipData = Android.content.ClipData
.newPlainText("text label", "text to clip");
clipboardManager.setPrimaryClip(clipData);
} else {
final Android.text.ClipboardManager clipboardManager = (Android.text.ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText("text to clip");
}
Pour un EditText
, Dans le manifeste de l'activité, utilisez Android:windowSoftInputMode="adjustResize"