Bagaimana cara mengaktifkan copy paste standar untuk TextView di Android?

119

Saya ingin mengaktifkan copy paste standar untuk TextView (sama seperti untuk EditText). Bagaimana saya bisa melakukannya?

Saya mencoba menggunakan EditText yang tidak dapat diedit tetapi tidak berfungsi dengan baik (terkadang dapat diedit atau overlay salin tempel tidak ditampilkan). Dan itu mungkin bukan pendekatan yang baik secara umum.

Butuh solusi yang berfungsi mulai dari API 7.

Ixx
sumber
Apakah ini yang kamu cari?
Jermin Bazazian
Ini mirip, tetapi tidak sama karena saya ingin menyalin semua teks. Tapi kelihatannya sama. Masalahnya adalah jawabannya di sana hanya berfungsi mulai dari API 11 dan saya memerlukan sesuatu yang berfungsi dari API 7.
Ixx
ClipboardManagertersedia sejak API 1 (lihat di sini ). Bagaimana dengan tekan lama, dengan popup untuk disalin ke clipboard?
Jermin Bazazian
@Jermin Ya, sepertinya saya harus membuat solusi khusus.
Ixx

Jawaban:

226

Coba android:textIsSelectable.

yaitu, android:textIsSelectable="true"

CommonsWare
sumber
Bisakah seseorang melakukannya untuk EditTextPreference?
bedak366
1
@ powder366: Menurut saya EditTextPreferencesudah mendukung copy / paste. Sepertinya di aplikasi Pengaturan.
CommonsWare
Sebenarnya ini sepertinya bug. Muncul di perangkat Samsung 4.2.2 saya. Nexus7 dan Nexus10 berfungsi. code.google.com/p/android/issues/detail?id=26008
powder366
Hanya catatan tentang ini, jika tampilan teks Anda awalnya tersembunyi dan Anda menampilkannya secara terprogram menggunakan setVisibility, maka Anda perlu menggunakan textView.setTextIsSelectable (true) untuk membuat ini berfungsi. Ini tidak akan bekerja melalui xml dalam kasus itu.
Praveen Singh
58

Untuk mengaktifkan salin / tempel standar untuk TextView, Anda dapat memilih salah satu dari berikut ini:

  1. Ubah file layout: tambahkan properti di bawah ini ke TextView Anda

    android:textIsSelectable="true"

  2. Di kelas Java Anda, tulis baris ini untuk menyetelnya secara terprogram. myTextView.setTextIsSelectable(true);

Dan tekan lama pada TextView, Anda dapat melihat bilah tindakan salin / tempel.

RamiReddy
sumber
1
saya melakukannya. ketika saya mengklik teks pada toolbar dengan tombol "copy" dan "pilih al" l terbuka. tapi setelah saya klik tidak ada yang terjadi. apa yang dapat saya?
Mina Dahesh
2
Solusi ini lebih baik daripada solusi yang ditandai benar dengan tanda centang hijau.
Adam Hurwitz
21

Ini berfungsi untuk menyalin pra-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();
    }
});
Ixx
sumber
4
Strategi yang baik adalah menggunakan ini bersama dengan jawaban CommonsWare. Sejak menambahkan android:textIsSelectablekehidupan dalam tata letak, itu hanya akan diabaikan pada level API yang lebih rendah. Kemudian gunakan solusi Ixx dalam pernyataan if yang memeriksa untuk melihat apakah level API di bawah 11. Terbaik dari kedua dunia. Hal yang menyenangkan tentang android:textIsSelectableini adalah memberi Anda bilah tindakan pemilihan teks platform, dan memiliki perasaan asli yang bagus.
emil10001
1
Metode setText (CharSequence) dari jenis ClipboardManager tidak digunakan lagi
S.M_Emamian
1
Ya, baiklah, jawaban ini lebih dari 2 tahun yang lalu. Jangan ragu untuk mengedit atau menambahkan yang baru.
Ixx
11

Membutuhkan API 11 , Kode Diperbarui, metode sebelumnya tidak digunakan lagi

Solusi untuk tema layar penuh tanpa ActionBar

Perpanjang TextViewdan tempelkan kode berikut konstruktor

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;
            }
        });
AZ_
sumber
9

Dalam tampilan teks xml, tempel kode ini

android:textIsSelectable="true"

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

Persyaratan: Perlu menyalin dan menempelkan teks yang ada di dalam tampilan teks.

OutCome: Menggunakan textview, setelah saya mengklik textview. Secara otomatis menyalin teks yang ada di textview.

Catatan: Saat mengimpor pengelola papan klip, coba pilih

Silakan pilih pengelola papan klip teks

import android.text.ClipboardManager; // prefer this 

cobalah untuk menghindari pengelola papan klip konten

import android.content.ClipboardManager; // Not this
Agilanbu
sumber
3
  1. gunakan tema

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

    atau

    @android:style/Theme.WithActionBar
  2. setel TextView dalam xml

    android:textIsSelectable="true"
  3. lihat hasilnya

Michael Mao
sumber
3

jika seseorang ingin bekerja ekstra dan memilih serta menyalin ke clipboard dengan satu klik:

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

                        }
                    });

telepon adalah TextView dan telepon. Teks adalah Teks yang akan disalin ke clipboard.

narcis dpr
sumber
0

ini lebih baik:

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

Untuk EditText, dalam manifes di dalam aktivitas, gunakan android:windowSoftInputMode="adjustResize"

rajeesh
sumber