2012-04-30 9 views
60

Voglio abilitare copia standard per un TextView (lo stesso di EditText). Come posso farlo?Come abilitare la copia di copia standard per un TextView in Android?

Ho provato a utilizzare un EditText non modificabile ma non ha funzionato bene (a volte è diventato modificabile o l'overlay di copia non è stato mostrato). E probabilmente non è un buon approccio in generale.

bisogno di una soluzione di lavoro a partire da API 7.

+0

Is [questo] (http://stackoverflow.com/questions/3605155/android-copy-and-paste-with-textview) cosa stai cercando? –

+0

È simile, ma non è uguale perché voglio copiare tutto il testo. Ma sembra lo stesso.Il problema è che la risposta funziona solo a partire da API 11 e ho bisogno di qualcosa che funzioni dall'API 7. – Ixx

+0

'ClipboardManager' è disponibile dall'API 1 (guarda [qui] (http://developer.android.com/reference /android/text/ClipboardManager.html)). Che ne dici di premere a lungo, con un popup da copiare negli appunti? –

risposta

17

questo funziona per la copia pre-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(); 
    } 
}); 
+3

Una buona strategia sarebbe quella di usare questo insieme alla risposta di CommonsWare. Dal momento che l'aggiunta di 'android: textIsSelectable' risiede nel layout, verrà semplicemente ignorata a livelli API inferiori. Quindi utilizzare la soluzione di Ixx all'interno di un'istruzione if che controlla se il livello dell'API è inferiore a 11. Il meglio di entrambi i mondi. La cosa carina di 'android: textIsSelectable' è che ti dà la barra di azione della selezione del testo della piattaforma, e ha una bella sensazione nativa. – emil10001

+1

Il metodo setText (CharSequence) dal tipo ClipboardManager è deprecato –

+0

Sì, beh, questa risposta proviene da più di 2 anni fa. Sentiti libero di modificarlo o aggiungerne uno nuovo. – Ixx

46

Per attivare la copia/incolla standard per TextView, U può scegliere una delle seguenti opzioni:

  1. Cambiamento di file di layout: aggiungere sotto proprietà alla TextView

    android:textIsSelectable="true"

  2. Nella classe Java scrivere questa riga per impostarla a livello di codice. myTextView.setTextIsSelectable(true);

E premere a lungo il TextView potete vedere barra delle operazioni di copia/incolla.

+1

lo faccio. mentre faccio clic su testi, la barra degli strumenti con i pulsanti "copia" e "seleziona tutti" si apre. ma dopo averli cliccati non succede nulla. cosa posso fare? –

+2

Questa soluzione è migliore di quella contrassegnata corretta con il segno di spunta verde. –

+0

Funziona solo su API di livello 11 e superiori. –

8

Requires API 11, aggiornato codice, metodo precedente è deprecato

Soluzione per schermo intero tema senzaActionBar

Estendere TextView e in pasta costruttore di codice seguente

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

Per uno EditText, nel manifesta all'interno l'uso di attività android:windowSoftInputMode="adjustResize"

+0

Voto in aumento. Non capisco il downvote, questo è quello che ha risolto il problema per me, che si è verificato solo su Android 6! – 0101100101

3
  1. uso tema

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

    o

    @android:style/Theme.WithActionBar 
    
  2. set TextView in xml

    android:textIsSelectable="true" 
    
  3. vedere result

0

this è meglio:

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