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.


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"


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.


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

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

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

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


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.


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

-2

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.