Tworzę aplikację na Androida i chcę skopiować wartość tekstową widgetu EditText. Użytkownik może Menu+A
wtedy nacisnąć, Menu+C
aby skopiować wartość, ale jak mam to zrobić programowo?
231
Tworzę aplikację na Androida i chcę skopiować wartość tekstową widgetu EditText. Użytkownik może Menu+A
wtedy nacisnąć, Menu+C
aby skopiować wartość, ale jak mam to zrobić programowo?
Odpowiedzi:
Użyj
ClipboardManager#setPrimaryClip
metody:ClipboardManager
Dokumentacja interfejsu APIźródło
import android.content.ClipboardManager;
label
?Context context = getApplicationContext(); Toast.makeText(context, "text copied", Toast.LENGTH_LONG).show();
Wszyscy zgadzają się co do tego, jak to zrobić, ale ponieważ nikt nie chce dać kompletnego rozwiązania, oto:
Zakładam, że masz coś takiego jak zadeklarowane w manifeście:
źródło
label
innewPlainText
? dokumentacja stwierdzalabel User-visible label for the clip data.
. Ale kiedy jestlabel
widoczny dla użytkownika? A jaką wartość / nazwę powinienem podaćlabel
?Googling przenosi Cię do android.content.ClipboardManager i możesz zdecydować, tak jak ja, że Schowek nie jest dostępny w API <11, ponieważ strona dokumentacji mówi „Od: API 11”.
W rzeczywistości istnieją dwie klasy, druga rozszerzająca pierwszą - android.text.ClipboardManager i android.content.ClipboardManager.
android.text.ClipboardManager istnieje od API 1, ale działa tylko z zawartością tekstową.
android.content.ClipboardManager jest preferowanym sposobem pracy ze schowkiem, ale nie jest dostępny na poziomie API <11 (plaster miodu).
Aby uzyskać którykolwiek z nich, potrzebujesz następującego kodu:
Ale dla API <11 musisz zaimportować,
android.text.ClipboardManager
a dla API> = 11android.content.ClipboardManager
źródło
możesz spróbować tego ..
źródło
Oto kod do implementacji niektórych funkcji kopiowania i wklejania z EditText (dzięki Warpzit do sprawdzania wersji). Możesz podłączyć je do zdarzenia kliknięcia przycisku.
źródło
Aktualizacja biblioteki obsługi Androida
Począwszy od Androida Oreo, biblioteka wsparcia sprowadza się tylko do API 14. Większość nowszych aplikacji prawdopodobnie ma również minimalny interfejs API wynoszący 14, a zatem nie trzeba się martwić o problemy z API 11 wspomniane w niektórych innych odpowiedziach. Wiele kodu można wyczyścić. (Ale zobacz moją historię edycji, jeśli nadal wspierasz niższe wersje).
Kopiuj
Pasta
Dodam ten kod jako bonus, ponieważ kopiowanie / wklejanie zwykle odbywa się parami.
Notatki
android.content.ClipboardManager
wersję zamiast starejandroid.text.ClipboardManager
. To samo dotyczyClipData
.context.getSystemService()
.null
. Możesz sprawdzić każdy, jeśli okaże się, że jest to bardziej czytelne.źródło
Aby włączyć standardowe kopiowanie / wklejanie dla TextView, możesz wybrać jedną z następujących opcji:
Zmień plik układu: dodaj poniżej właściwości do TextView
W klasie Java napisz ten wiersz dwa gramatyczne.
myTextView.setTextIsSelectable(true);
I długo naciśnij TextView, możesz zobaczyć pasek akcji kopiuj / wklej.
źródło
I importuj
import android.content.ClipboardManager;
źródło
@FlySwat już podał prawidłową odpowiedź, po prostu udostępniam pełną odpowiedź:
Użyj metody ClipboardManager.setPrimaryClip ( http://developer.android.com/reference/android/content/ClipboardManager.html ):
Gdzie
label
jest widoczna dla użytkownika etykieta danych klipu itext
rzeczywisty tekst w klipie. Według oficjalnych dokumentów .Ważne jest, aby użyć tego importu:
źródło
Oto mój działający kod
źródło
W przypadku Kotlin możemy zastosować następującą metodę. Możesz wkleić tę metodę do działania lub fragmentu.
źródło
context.
była część, której mi brakowało - być może dlatego, że robię to w ramach fragmentu.