ฉันจะเปิดใช้งานการวางสำเนามาตรฐานสำหรับ TextView ใน Android ได้อย่างไร


119

ฉันต้องการเปิดใช้งานการวางสำเนามาตรฐานสำหรับ TextView (เช่นเดียวกับ EditText) ฉันจะทำมันได้อย่างไร?

ฉันลองใช้ EditText ที่ไม่สามารถแก้ไขได้ แต่มันทำงานได้ไม่ดี (บางครั้งก็แก้ไขได้หรือไม่แสดงการวางซ้อนการคัดลอก) และอาจไม่ใช่แนวทางที่ดีโดยทั่วไป

ต้องการโซลูชันที่ใช้งานได้โดยเริ่มต้นที่ API 7


คือนี้สิ่งที่คุณกำลังมองหา?
Jermin Bazazian

มันคล้ายกัน แต่ไม่เหมือนกันเพราะฉันต้องการคัดลอกข้อความทั้งหมด แต่ดูเหมือนกัน. ปัญหาคือคำตอบเริ่มต้นที่ API 11 เท่านั้นและฉันต้องการบางอย่างที่ใช้งานได้จาก API 7
Ixx

ClipboardManagerสามารถใช้ได้ตั้งแต่ API 1 (ดูที่นี่ ) ลองกดด้วยป๊อปอัปเพื่อคัดลอกไปยังคลิปบอร์ดล่ะ?
Jermin Bazazian

@Jermin ใช่ดูเหมือนว่าฉันต้องสร้างโซลูชันที่กำหนดเอง
Ixx

คำตอบ:


226

ลองandroid:textIsSelectable.

กล่าวคือ android:textIsSelectable="true"


สามารถทำได้เพื่อ EditTextPreference หรือไม่?
powder366

1
@ powder366: ฉันคิดว่ามันEditTextPreferenceรองรับการคัดลอก / วางแล้ว ดูเหมือนว่าจะอยู่ในแอปการตั้งค่า
CommonsWare

จริงๆแล้วน่าจะเป็นบั๊ก แสดงบนอุปกรณ์ Samsung 4.2.2 ของฉัน Nexus7 และ Nexus10 ใช้งานได้ code.google.com/p/android/issues/detail?id=26008
powder366

หมายเหตุเกี่ยวกับสิ่งนี้หากมุมมองข้อความของคุณถูกซ่อนไว้ในตอนแรกและคุณกำลังแสดงโดยใช้ setVisibility ทางโปรแกรมคุณจะต้องใช้ textView.setTextIsSelectable (true) เพื่อให้ทำงานได้ มันจะไม่ทำงานผ่าน xml ในกรณีนั้น
ประวีณสิงห์

58

ในการเปิดใช้งานการคัดลอก / วางมาตรฐานสำหรับ TextView คุณสามารถเลือกอย่างใดอย่างหนึ่งต่อไปนี้:

  1. เปลี่ยนไฟล์เลย์เอาต์: เพิ่มคุณสมบัติด้านล่างลงใน TextView ของคุณ

    android:textIsSelectable="true"

  2. ในคลาส Java ของคุณให้เขียนบรรทัดนี้เพื่อตั้งค่าโดยใช้โปรแกรม myTextView.setTextIsSelectable(true);

และกด TextView ค้างไว้คุณจะเห็นแถบการดำเนินการคัดลอก / วาง


1
ฉันทำเช่นนั้น เมื่อฉันคลิกที่ข้อความบนแถบเครื่องมือพร้อมกับเปิดปุ่ม "คัดลอก" และ "เลือกอัล" แต่หลังจากที่ฉันคลิกก็ไม่มีอะไรเกิดขึ้น ฉันจะทำอย่างไร
Mina Dahesh

2
วิธีนี้ดีกว่าวิธีที่มีเครื่องหมายถูกสีเขียวกำกับไว้
Adam Hurwitz

21

สิ่งนี้ใช้ได้กับการคัดลอกก่อน 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
กลยุทธ์ที่ดีคือการใช้สิ่งนี้ควบคู่ไปกับคำตอบของ CommonsWare เนื่องจากการเพิ่มandroid:textIsSelectableชีวิตในเค้าโครงมันจะถูกละเว้นในระดับ API ที่ต่ำกว่า จากนั้นใช้โซลูชันของ Ixx ภายในคำสั่ง if ที่ตรวจสอบว่าระดับ API ต่ำกว่า 11 ดีที่สุดในทั้งสองโลกหรือไม่ สิ่งที่ดีandroid:textIsSelectableคือมันให้แถบการกระทำการเลือกข้อความของแพลตฟอร์มและให้ความรู้สึกที่ดี
emil10001

1
เมธอด setText (CharSequence) จากประเภท ClipboardManager เลิกใช้แล้ว
S.M_Emamian

1
ใช่คำตอบนี้มาจาก 2 ปีที่แล้ว อย่าลังเลที่จะแก้ไขหรือเพิ่มใหม่
Ixx

11

ต้องใช้ API 11รหัสที่อัปเดตวิธีการก่อนหน้านี้เลิกใช้แล้ว

โซลูชันสำหรับธีมแบบเต็มหน้าจอที่ไม่มี ActionBar

ขยายTextViewและในตัวสร้างวางรหัสต่อไปนี้

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 textview วางรหัสนี้

android:textIsSelectable="true"

จากนั้นในไฟล์ 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();
        }
    });

ความต้องการ:ต้องคัดลอกและวางข้อความที่อยู่ในมุมมองข้อความ

OutCome:การใช้ textview เมื่อฉันคลิก textview โดยอัตโนมัติคัดลอกข้อความที่อยู่ใน textview

หมายเหตุ:ในขณะที่นำเข้า clipboardmanager ให้ลองเลือกใช้

โปรดชอบผู้จัดการคลิปบอร์ดข้อความ

import android.text.ClipboardManager; // prefer this 

พยายามหลีกเลี่ยงตัวจัดการคลิปบอร์ดเนื้อหา

import android.content.ClipboardManager; // Not this


3

หากใครบางคนต้องการก้าวไปอีกขั้นและเลือกและคัดลอกไปยังคลิปบอร์ดได้ด้วยคลิกเดียว:

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

                        }
                    });

โทรศัพท์คือ TextView และโทรศัพท์ Text คือข้อความที่จะถูกคัดลอกไปยังคลิปบอร์ด


0

นี้จะดีกว่า:

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

สำหรับEditTextในรายการภายในกิจกรรมให้ใช้ android:windowSoftInputMode="adjustResize"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.