2012-04-30 10 views
60

Tôi muốn bật dán bản sao chuẩn cho một TextView (giống như đối với EditText). Tôi làm nó như thế nào?Làm cách nào để bật dán bản sao chuẩn cho một TextView trong Android?

Tôi đã thử sử dụng EditText không thể chỉnh sửa nhưng nó không hoạt động tốt (đôi khi nó có thể chỉnh sửa được hoặc lớp phủ dán sao chép không được hiển thị). Và nó có lẽ không phải là một cách tiếp cận tốt nói chung.

Cần một giải pháp làm việc bắt đầu từ API 7.

+0

là [này] (http://stackoverflow.com/questions/3605155/android-copy-and-paste-with-textview) những gì bạn đang tìm kiếm? –

+0

Nó tương tự, nhưng không giống nhau vì tôi muốn sao chép tất cả văn bản. Nhưng có vẻ như vậy.Vấn đề là câu trả lời chỉ có tác dụng bắt đầu từ API 11 và tôi cần một cái gì đó hoạt động từ API 7. – Ixx

+0

'ClipboardManager' có sẵn từ API 1 (xem [tại đây] (http://developer.android.com/reference /android/text/ClipboardManager.html)). Làm thế nào về báo chí dài, với một popup để sao chép vào clipboard? –

Trả lời

17

này làm việc cho bản pre-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

Một chiến lược tốt sẽ là sử dụng điều này cùng với câu trả lời của CommonsWare. Kể từ khi thêm 'android: textIsSelectable' vào bố cục, nó sẽ bị bỏ qua ở các mức API thấp hơn. Sau đó, sử dụng giải pháp của Ixx trong một câu lệnh if để kiểm tra xem mức API có dưới mức 11. Tốt nhất của cả hai thế giới. Điều tuyệt vời về 'android: textIsSelectable' là nó cung cấp cho bạn thanh tác vụ chọn văn bản của nền tảng và có cảm giác bản địa tuyệt vời. – emil10001

+1

Phương thức setText (CharSequence) từ loại ClipboardManager không được chấp nhận –

+0

Có, tốt, câu trả lời này là từ hơn 2 năm trước. Vui lòng chỉnh sửa hoặc thêm mới. – Ixx

119
+7

Dường như chỉ hoạt động từ API 11 – Ixx

+0

Có thể làm việc đó cho EditTextPreference không? – powder366

+0

@ powder366: Tôi nghĩ rằng 'EditTextPreference' đã hỗ trợ sao chép/dán. Nó chắc chắn dường như trong ứng dụng Cài đặt. – CommonsWare

46

Để kích hoạt sao chép/dán tiêu chuẩn cho TextView, U có thể chọn một trong các cách sau:

  1. Thay đổi trong file layout: thêm dưới đây để sở hữu TextView của mình

    android:textIsSelectable="true"

  2. Trong lớp Java của bạn viết dòng này để thiết lập nó theo lập trình. myTextView.setTextIsSelectable(true);

Và nhấn và giữ trên TextView bạn có thể thấy thanh tác vụ sao chép/dán.

+1

tôi làm như vậy. khi tôi nhấp vào văn bản, thanh công cụ có nút "sao chép" và "chọn al" l mở. nhưng sau khi tôi nhấp vào thì không có gì xảy ra. tôi có thể làm gì? –

+2

Giải pháp này tốt hơn giải pháp được đánh dấu đúng với dấu kiểm màu xanh lục. –

+0

Chỉ hoạt động ở cấp API 11 trở lên. –

8

Requires API 11, cập nhật luật, phương pháp trước đó bị phản đối

Giải pháp cho chủ đề toàn màn hình mà không cầnActionBar

Mở rộng TextView và trong constructor dán đoạn mã sau

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

Đối an EditText, trong manifest trong việc sử dụng hoạt động android:windowSoftInputMode="adjustResize"

+0

Được thăng hạng. Tôi không hiểu downvote, đây là những gì giải quyết vấn đề cho tôi, mà chỉ xảy ra trên Android 6! – 0101100101

3
  1. chủ đề sử dụng

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

    hoặc

    @android:style/Theme.WithActionBar 
    
  2. bộ TextView trong xml

    android:textIsSelectable="true" 
    
  3. thấy result

0

this là tốt hơn:

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