web-dev-qa-db-fra.com

Comment activer le copier/coller standard pour un TextView sous Android?

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.

91
Ixx

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

Essayez Android:textIsSelectable .

c'est-à-dire Android:textIsSelectable="true"

177
CommonsWare

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

  1. Modification du fichier de mise en page: ajoutez la propriété ci-dessous à votre TextView

    Android:textIsSelectable="true"

  2. 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.

54
RamiReddy

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;
            }
        });
9
AZ_
  1. utiliser le thème 

    @Android:style/Theme.Black.NoTitleBar.Fullscreen
    

    ou

    @Android:style/Theme.WithActionBar
    
  2. définir TextView en XML

    Android:textIsSelectable="true"
    
  3. voir résultat

3
Michael Mao

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
0
Agilanbu

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");
}
0
Beeing Jk

Pour un EditText, Dans le manifeste de l'activité, utilisez Android:windowSoftInputMode="adjustResize"

0
rajeesh