Chcę utworzyć EditText
widok tylko do odczytu . Wygląda na to android:editable="false"
, że XML do wykonania tego kodu jest , ale chcę to zrobić w kodzie.
W jaki sposób mogę to zrobić?
android
android-edittext
warna
źródło
źródło
android:editable
jest to przestarzałeEditText
.UI.setReadOnly(myEditText, true)
z tej biblioteki . Jest kilka właściwości, które należy ustawić, które można sprawdzić w kodzie źródłowym .android:inputType="none"
iandroid:textIsSelectable="true"
Odpowiedzi:
Użyj tego kodu.
źródło
Jeśli
setEnabled(false)
wówczaseditText
wyglądałaby wyłączony (szary, itp). Możesz nie chcieć zmieniać wizualnego aspektu swojego edytora.Mniej inwazyjnym sposobem byłoby użycie
setFocusable(false)
.Uważam, że to odpowiada na twoje pytanie bliżej twojego pierwotnego zamiaru.
źródło
setFocusable(false)
(a nawetsetFocusableInTouchMode(false)
zsetClickable(false)
), możesz nadal zmieniać wartość swojegoeditText
naciśnięciaeditText
na kilkaset milisekund i wybierającPaste
opcję, chyba że schowek systemowy jest pusty. Przetestowałem to z najnowszym dostępnym API, czyli 23 .W
XML
użyciu:Jako przykład:
źródło
editable
atrybut nie wydaje się przestarzałe (a przynajmniej nie w poziomu API 23).android:inputType="none"
android:inputType="none"
a dane są nadal edytowalne.To działa dla mnie:
źródło
Najlepiej jest używać
TextView
zamiast tego.źródło
Zgodnie z dokumentacją zapobiega to wyświetlaniu klawiatury programowej. Zapobiega również wklejaniu, umożliwia przewijanie i nie zmienia wizualnego aspektu widoku. Jednak zapobiega to również zaznaczaniu i kopiowaniu tekstu w widoku.
Z moich testów ustawienie
setInputType
naTYPE_NULL
wydaje się być funkcjonalnym odpowiednikiem amortyzacjiandroid:editable="false"
. Dodatkowoandroid:inputType="none"
wydaje się nie mieć zauważalnego efektu.źródło
android:inputType="none"
już nie działa.android: editable = "false" został wycofany. Dlatego nie możesz go użyć, aby tekst edycji był tylko do odczytu.
Zrobiłem to za pomocą poniższego rozwiązania. Tutaj użyłem
android: inputType = "none"
android: textIsSelectable = "true"
android: focusable = "false"
Spróbuj :)
źródło
android:enabled="false"
może być dobrą alternatywą.To da ci nieedytowalny filtr EditText. najpierw musisz umieścić żądany tekst w polu editText, a następnie zastosować ten filtr.
źródło
return dst.subSequence(dstart, dend);
napisanie tych dwóch wierszy jest więcej niż wystarczające do twojej pracy.
źródło
ustawione w XML
źródło
Spróbuj użyć
źródło
Jeśli jest ustawiona, określa, że
TextView
ma metodę wprowadzania. Będzie to tekst tekstowy, chyba że określono inaczej. PonieważTextView
jest to domyślnie fałszywe. PonieważEditText
jest to domyślnie prawda.Musi być
boolean
wartość, albotrue
albofalse
.Może to być również odniesienie do zasobu (w formularzu
@[package:]type:name
) lub atrybutu motywu (w formularzu?[package:][type:]name
) zawierającego wartość tego typu.Odpowiada to edytowalnemu globalnemu symbolowi zasobu atrybutu.
Powiązane metody
źródło
Spróbuj zastąpić detektor onLongClick tekstu edycji, aby usunąć menu kontekstowe:
źródło
Użyj tego kodu:
Wyłączenie
editText
zapewnia wygląd i zachowanie tylko do odczytu, ale także zmieniatext-color
kolor na szary, więc konieczne jest ustawienie koloru tekstu.źródło
to jest moja implementacja (trochę długa, ale przydatna dla mnie!): Za pomocą tego kodu możesz ustawić EditView jako tylko do odczytu lub Normalny. nawet w stanie tylko do odczytu tekst może być kopiowany przez użytkownika. możesz zmienić tło, aby wyglądało inaczej niż zwykły tekst edycji.
Zaletą tego kodu jest to, że EditText jest wyświetlany jako normalny EditText, ale zawartość nie jest zmienna. Wartość zwracana powinna być zachowana jako zmienna, aby umożliwić powrót ze stanu tylko do odczytu do normalnego.
aby uczynić EditText tylko do odczytu, po prostu umieść go jako:
i aby to było normalne użyj tw z poprzedniego oświadczenia:
źródło
To zadziałało w moim przypadku, biorąc pod uwagę kilka z powyższych sugestii. Sprawia, że TextEdit jest fokusem, ale jeśli użytkownik kliknie lub ustawi fokus, wyświetlimy listę wyborów w PopupWindow. (Zastępujemy zwariowany widżet Spinner). TextEdit xml jest bardzo ogólny ...
źródło
Jeśli chcesz tylko skopiować tekst z kontrolki, ale nie możesz go edytować, możesz zamiast tego użyć TextView i ustawić tekst, który można zaznaczyć .
kod:
xml:
Dokumentacja setTextIsSelectable mówi:
Jednak musiałem jawnie ustawić focusable i focusableInTouchMode na true, aby działał z wprowadzaniem dotykowym.
źródło
To było dla mnie jedyne w pełni proste rozwiązanie.
źródło
Nie miałem problemu, aby EditTextPreference był tylko do odczytu, używając:
Działa to dobrze w połączeniu z użyciem pola „podsumowanie” do wyświetlania pól tylko do odczytu (przydatne na przykład do wyświetlania informacji o koncie). Aktualizowanie pól podsumowań dynamicznie pobieranych z http://gmariotti.blogspot.com/2013/01/preferenceactivity-preferencefragment.html
źródło
Ustaw to w pliku EdiTextView xml
źródło
Jak
android:editable=""
jest przestarzałe,ustawienie
android:clickable="false"
android:focusable="false"
android:inputType="none"
android:cursorVisible="false"
uczyni go „tylko do odczytu”.
Jednak użytkownicy nadal będą mogli wklejać w pole lub wykonywać inne długie kliknięcia. Aby to wyłączyć, po prostu zastąp onLongClickListener ().
W Kotlinie:
myEditText.setOnLongClickListener { true }
wystarczy.
źródło
Moje podejście do tego polegało na utworzeniu niestandardowej klasy TextWatcher w następujący sposób:
Następnie wystarczy dodać tego obserwatora do dowolnego pola, które ma być tylko do odczytu, mimo że jest włączone:
źródło