Czy istnieje sposób, aby zezwolić użytkownikowi na zaznaczanie / kopiowanie tekstu w TextView? Potrzebuję tej samej funkcji EditText, w której można długo nacisnąć kontrolkę i uzyskać wyskakujące opcje zaznacz wszystko / kopiuj, ale potrzebuję, aby kontrolka wyglądała jak TextView.
Próbowałem kilku rzeczy, takich jak ustawienie EditText przy użyciu opcji editable = "none" lub inputType = "none", ale te nadal zachowują oprawione tło EditText, czego nie chcę,
Dzięki
------- Aktualizacja ----------------------
To jest 99%, wszystko czego bym chciał, to żeby hilight selekcji był widoczny (pomarańczowe rzeczy). Poza tym jest dobrze, ale można z tym żyć:
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:editable="false"
style="?android:attr/textViewStyle"
android:textColor="@color/white"
android:textAppearance="@android:style/TextAppearance.Medium"
android:cursorVisible="false"
android:background="@null" />
Wydaje mi się, że jest to spowodowane przez kursorVisible = "false", ale bez tego kursor jest obecny nawet bez dokonywania wyboru.
Odpowiedzi:
android: textIsSelectable działa (przynajmniej w ICS - jeszcze nie sprawdzałem we wcześniejszych wersjach)
źródło
Widok tekstu musi być włączony, możliwy do zaznaczenia, longClickable i textIsSelectable
źródło
textIsSelectable
to za mało? to działa dla mnie tylko z tą opcjątextview.setTextIsSelectable(true)
w kodzie java.textIsSelectableis
do pracy za mnietextIsSelectable
działa w niektórych przypadkach, ale nie w innych. Czasami ten sam układ nie zawsze działa tylko z tekstem textIsSelectable, ale z innym tekstem. Jednak to rozwiązanie nie wydaje się działać lepiej, więc problem może pochodzić z innego miejsca.Myślę, że mam lepsze rozwiązanie. Zadzwoń
registerForContextMenu(yourTextView);
a Twoja
TextView
zostanie zarejestrowana do otrzymywania zdarzeń z menu kontekstowego.Następnie nadpisz
onCreateContextMenu
w swoimActivity
Mam nadzieję, że pomoże to Tobie i każdemu, kto szuka sposobu na skopiowanie tekstu z pliku
TextView
źródło
ClipboardManager.setText(CharSequence text)
został uznany za przestarzały na poziomie API 11. UżyjsetPrimaryClip(ClipData)
zamiast tego. Spowoduje to utworzenie ClippedItem przechowującego podany tekst i ustawienie go jako klipu podstawowego. Nie ma etykiety ani ikony. Dobra lektura na temat kopiowania i wklejania: linkUmożliwi to użytkownikowi zaznaczanie i kopiowanie tekstu po długim kliknięciu lub tak jak zwykle
źródło
Próbuję zaimplementować to samo, a twoje pytanie pomogło mi poprawnie ustawić układ mojego pliku editext. Więc dziękuję! :)
Wtedy zdałem sobie sprawę, że podświetlenie będzie faktycznie widoczne, jeśli kursor jest włączony. Ale ja tak jak ty nie chcesz widzieć kursora przed długim kliknięciem tekstu, więc ukrywam kursor w pliku layout.xml, tak jak ty, i dodałem Eventlistener dla długiego kliknięcia i wyświetlam kursor tylko wtedy, gdy zaczyna się zaznaczanie .
Więc dodaj odbiorcę do swojej aktywności w sekcji onCreate:
I voilá, na początku nie ma kursora, a długie kliknięcie spowoduje wyświetlenie kursora z granicami zaznaczenia.
Mam nadzieję, że mógłbym pomóc.
Pozdrawiam, fm
źródło
Próbowałem też zrobić coś podobnego, ale nadal potrzebowałem niestandardowego podejścia z manipulacją podświetlaniem tekstu w TextView. Uruchomiłem podświetlanie i kopiowanie w
LongClick
akcji.Oto jak poradziłem sobie z użyciem
SpannableString
:oraz funkcja kopiowania:
Mam nadzieję, że komuś, kto trafi na to pytanie, będzie pomocne :)
źródło
Używanie Kotlin programowo (kopiowanie ręczne)
Lub dodaj rozszerzenie właściwości Kotlin
Wtedy zadzwoń
Używanie Kotlin programowo (automatyczne kopiowanie)
Jeśli chcesz automatycznie kopiować, gdy użytkownik długo naciska na przeglądarkę, jest to wymagany kod podstawowy:
Możesz dodać,
Toast
aby potwierdzić, że to się stałoLub dodaj funkcję rozszerzenia Kotlin
Korzystanie z XML (kopiowanie ręczne)
Dodaj to do swojego
<TextView>
źródło
Po prostu użyj tej prostej biblioteki: GitHub: Selectable TextView
źródło