2012-04-30 9 views
60

Quiero habilitar la copia estándar para un TextView (lo mismo que para EditText). ¿Cómo puedo hacerlo?¿Cómo activo el copy copy estándar para un TextView en Android?

Intenté usar un EditText no editable pero no funcionó bien (a veces se puede editar o no se muestra la superposición de pegar y copiar). Y probablemente no sea un buen enfoque en general.

Necesita una solución de trabajo a partir de las API 7.

+0

Es [esto] (http://stackoverflow.com/questions/3605155/android-copy-and-paste-with-textview) ¿Qué estás buscando? –

+0

Es similar, pero no es lo mismo porque quiero copiar todo el texto. Pero parece lo mismo.El problema es que la respuesta solo funciona a partir de API 11 y necesito algo que funcione desde API 7. – Ixx

+0

'ClipboardManager' está disponible desde la API 1 (mira [aquí] (http://developer.android.com/reference) /android/text/ClipboardManager.html)). ¿Qué tal una pulsación larga, con una ventana emergente para copiar al portapapeles? –

Respuesta

17

Esto funciona para copia previa a 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 buena estrategia sería usar esto junto con la respuesta de CommonsWare. Como en el diseño se agrega 'android: textIsSelectable', solo se ignorará en los niveles de API más bajos. Luego usa la solución de Ixx dentro de una declaración if que comprueba si el nivel de API está por debajo de 11. Lo mejor de ambos mundos. Lo bueno de 'android: textIsSelectable' es que te da la barra de acción de selección de texto de la plataforma y tiene una agradable sensación nativa. – emil10001

+1

El método setText (CharSequence) del tipo ClipboardManager está en desuso –

+0

Sí, bueno, esta respuesta es de hace más de 2 años. Siéntase libre de editar o agregar uno nuevo. – Ixx

119
+7

Parece que funciona solo desde API 11 – Ixx

+0

¿Se puede hacer por EditTextPreference? – powder366

+0

@ powder366: Creo que 'EditTextPreference' ya admite copiar/pegar. Ciertamente parece en la aplicación de Configuración. – CommonsWare

46

Para que el copiar/pegar estándar para TextView, U puede elegir uno de los siguientes:

  1. Cambio en el archivo de diseño: añadir a continuación propiedad a su TextView

    android:textIsSelectable="true"

  2. En su clase Java, escriba esta línea para configurarla programáticamente. myTextView.setTextIsSelectable(true);

Y pulsación larga de la TextView se puede ver la barra de acción de copiar/pegar.

+1

lo hago. Cuando hago clic en los textos, se abre la barra de herramientas con los botones "copiar" y "seleccionar al". pero después de hacer clic en ellos, no pasa nada. ¿que puedo hacer? –

+2

Esta solución es mejor que la marcada como correcta con la marca de verificación verde. –

+0

Solo funciona en API nivel 11 y superior. –

8

Requires API 11, actualizado Código, está obsoleto método anterior

Solución para pantalla completa tema sinActionBar

Extender TextView y en la pasta de constructor siguiente código

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

Para un EditText, en el manifiesto dentro del uso actividad android:windowSoftInputMode="adjustResize"

+0

Votación máxima. No entiendo el voto negativo, esto es lo que resolvió el problema para mí, ¡que solo ocurrió en Android 6! – 0101100101

3
  1. uso tema

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

    o

    @android:style/Theme.WithActionBar 
    
  2. conjunto TextView en xml

    android:textIsSelectable="true" 
    
  3. ver result

0

this es mejor:

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