Android'de bir TextView için standart kopyala yapıştırmayı nasıl etkinleştiririm?


119

Bir TextView için standart kopyala yapıştırmayı etkinleştirmek istiyorum (EditText ile aynı). Nasıl yapabilirim?

Düzenlenebilir olmayan bir EditText kullanmayı denedim, ancak iyi çalışmadı (bazen düzenlenebilir hale geldi veya kopyala yapıştır kaplaması gösterilmedi). Ve muhtemelen genel olarak iyi bir yaklaşım değil.

API 7'den başlayan çalışan bir çözüme ihtiyacınız var.


Aradığınız bu mu?
Jermin Bazazian

Benzer, ancak aynı değil çünkü tüm metni kopyalamak istiyorum. Ama aynı görünüyor. Sorun şu ki, yanıt yalnızca API 11'den başlayarak çalışıyor ve API 7'den çalışan bir şeye ihtiyacım var.
Ixx

ClipboardManagerAPI 1'den beri mevcuttur ( buraya bakın ). Panoya kopyalamak için bir açılır pencere ile uzun basmaya ne dersiniz?
Jermin Bazazian

@Jermin Evet, özel bir çözüm yapmam gerekiyor gibi görünüyor.
Ixx

Yanıtlar:


226

Deneyin android:textIsSelectable.

yani android:textIsSelectable="true"


EditTextPreference için yapılabilir mi?
powder366

1
@ powder366: Sanırım EditTextPreferencezaten kopyala / yapıştır'ı destekliyor. Kesinlikle Ayarlar uygulamasında görünüyor.
CommonsWare

Aslında bir hata gibi görünüyor. Samsung 4.2.2 cihazımda görünüyor. Nexus7 ve Nexus10 çalışır. code.google.com/p/android/issues/detail?id=26008
powder366

Bununla ilgili bir not, eğer metin görünümünüz başlangıçta gizliyse ve bunu setVisibility kullanarak programlı olarak gösteriyorsanız, bunun çalışması için textView.setTextIsSelectable (true) kullanmanız gerekir. Bu durumda xml ile çalışmaz.
Praveen Singh

58

TextView için standart kopyala / yapıştır özelliğini etkinleştirmek için, U aşağıdakilerden birini seçebilirsiniz:

  1. Düzen dosyasında değişiklik: TextView'unuza aşağıdaki özelliği ekleyin

    android:textIsSelectable="true"

  2. Java sınıfınızda programlı olarak ayarlamak için bu satırı yazın. myTextView.setTextIsSelectable(true);

Ve TextView'a uzun basın, kopyala / yapıştır eylem çubuğunu görebilirsiniz.


1
yapıyorum. Metinlere tıkladığımda "kopyala" ve "seç" düğmelerini içeren araç çubuğu açılıyor. ama onları tıkladıktan sonra hiçbir şey olmuyor. Ne yapabilirim?
Mina Dahesh

2
Bu çözüm, yeşil onay işaretiyle doğru olarak işaretlenenden daha iyidir.
Adam Hurwitz

21

Bu, Honeycomb öncesi kopyalamak için çalışır:

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

4
Bunu CommonsWare'in cevabıyla birlikte kullanmak iyi bir strateji olacaktır. Düzene android:textIsSelectablecan ekledikten sonra, daha düşük API seviyelerinde göz ardı edilecektir. Daha sonra, API seviyesinin 11'in altında olup olmadığını kontrol eden bir if ifadesi içinde Ixx'in çözümünü kullanın. Her iki dünyanın da en iyisi. Güzel olan şey android:textIsSelectable, size platformun metin seçme eylem çubuğunu vermesi ve hoş bir yerel hissi vermesidir.
emil10001

1
ClipboardManager türündeki setText (CharSequence) yöntemi kullanımdan kaldırıldı
S.M_Emamian

1
Evet, bu cevap 2 yıldan daha uzun bir süre öncesine ait. Yeni bir tane düzenlemekten veya eklemekten çekinmeyin.
Ixx

11

API 11 , Güncellenmiş Kod gerektirir , önceki yöntem kullanımdan kaldırılmıştır

Olmadan tam ekran tema çözümü ActionBar

TextViewAşağıdaki kodu yapıcı yapıştırma ve genişletme

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

Xml metin görünümünde bu kodu yapıştırın

android:textIsSelectable="true"

Sonra java dosyasında,

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

Gereksinim: Metin görünümündeki metni kopyalayıp yapıştırmanız gerekir.

Sonuç : görünümünü kullanarak, görünümüne tıkladığımda. Metin görünümündeki metni otomatik olarak kopyaladı.

Not: clipboardmanager'ı içe aktarırken tercih etmeyi deneyin

Lütfen metin panosu yöneticisini tercih edin

import android.text.ClipboardManager; // prefer this 

içerik panosu yöneticisinden kaçınmaya çalışın

import android.content.ClipboardManager; // Not this

3
  1. temayı kullan

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

    veya

    @android:style/Theme.WithActionBar
  2. xml'de TextView ayarla

    android:textIsSelectable="true"
  3. bkz sonucu


3

birisi fazladan mil gitmek ve seçip tek bir tıklama ile panoya kopyalamak isterse:

 phone.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                            ClipData clip = ClipData.newPlainText("PhoneNumber", phone.getText());
                            clipboard.setPrimaryClip(clip);

                        }
                    });

telefon, TextView ve telefondur. Metin, panoya kopyalanacak Metindir.


0

bu daha iyi:

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

-2

Bir için EditText, faaliyetin içinde açıkça kullanın android:windowSoftInputMode="adjustResize"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.