W mojej aplikacji mam tekst EditText, który użytkownik ma tylko do odczytu, a nie do zapisu.
W kodzie ustawiłem android:enabled="false"
.
Chociaż tło EditText zmieniło się na ciemne, po kliknięciu pojawia się klawiatura i mogę zmienić tekst.
Co powinienem ustawić, aby wyłączyć EditText?
android
android-edittext
Hesam
źródło
źródło
EditText
chwilę wyłączyć zachowanie tych właściwości, wystarczy skorzystaćUI.setReadOnly(myEditText, true)
z tej biblioteki . Jeśli chcesz zreplikować to zachowanie bez biblioteki, sprawdź kod źródłowy tej małej metody.Odpowiedzi:
Wierzę, że poprawne byłoby ustawienie
android:editable="false"
.A jeśli zastanawiasz się, dlaczego mój link wskazuje na atrybuty
TextView
, odpowiedź brzmi, ponieważEditText
dziedziczy poTextView
:Aktualizacja:
jak wspomniano w komentarzach poniżej,
editable
jest przestarzała ( od poziomu API 3 ). Zamiast tego powinieneś używaćinputType
(z wartościąnone
).źródło
editText.setEnabled(false); editText.setInputType(InputType.TYPE_NULL);
android:editable="false" android:focusable="false"
działa świetnie dla mnie (zapomnij o przestarzałych, myślę, że android: edytowalny nie ma nic wspólnego z Androidem: inputType)użyj,
EditText.setFocusable(false)
aby wyłączyć edycję,EditText.setFocusableInTouchMode(true)
aby umożliwić edycję;źródło
editText.setEnabled(false);
spowoduje zmianę koloru tekstu na szary. Jednak błystki nie zmieniają koloru tekstu podczas używaniasetEnabled
, co powoduje, że jest to niespójne.setFocusable(true)
? zobacz ten link, aby zobaczyć różnicę między :setFocusable()
i stackoverflow.com/questions/23799064/...setFocusableInTouchMode()
Możesz wypróbować następującą metodę:
Włączony EditText:
Wyłączony Edytuj tekst:
To działa dla mnie i mam nadzieję, że ci pomoże.
źródło
editText.setFocusableInTouchMode(true)
zamiasteditText.setFocusable(true)
.Użyj tego, aby wyłączyć wprowadzanie danych przez użytkownika
android: editable = "false" Ta metoda jest przestarzała.
źródło
Aby wyłączyć edycję
EditText
, myślę, że możemy użyćfocusable
LUB,enable
aleZa pomocą
android:enabled=...
lubeditText.setEnabled(...)
Zmienia również kolor tekstu
EditText
na szary.Po kliknięciu nie ma żadnego efektu
Za pomocą
android:focusable=...
lubeditText.setFocusable(false)
-editText.setFocusableInTouchMode(true)
Nie zmienia koloru tekstu
EditText
Po kliknięciu podświetla
EditText
dolną linię na około kilka milisekundWynik
źródło
android:longClickable="false"
wraz z,android:focusable="false"
aby usunąć tymczasowe podświetlenie po dotknięciu tego widoku. Zapobiega to również pojawianiu się wyskakującego okienka „wybierz wszystko”.Jak
android:editable="false"
jest depricated.Możesz użyć InputType TYPE_NULL na EditTextużyj w ten sposób:
źródło
Jak
android:editable="false"
przestarzałe wxml
Jeśli chcesz
java class
, możesz również użyć tego programowoźródło
Po prostu:
źródło
Ustaw poniższe właściwości w klasie:
Będzie działać płynnie, jak potrzebujesz.
źródło
enabled
wystarczaAby wyłączyć funkcję EditText, wystarczy użyć:
jeśli chcesz to włączyć, możesz użyć:
źródło
Jeśli użyjesz
android:editable="false"
, Eclipse przypomni ci komunikat „android: edytowalny jest przestarzały: zamiast tego użyj inputType”.Więc używam
android:focusable="false"
zamiast tego, działało to dla mnie dobrze.źródło
jest teraz przestarzałe i używa
źródło
TYPE_TEXT_VARIATION_PASSWORD
Śledź to, aby uzyskać więcej developer.android.com/reference/android/text/InputTypeUżyj
TextView
zamiast tego.źródło
Wyłącz = FOCUS + KLIKNIJ + STRZAŁKA
Wyłączenie widoczności fokusa, kliknięcia i kursora załatwia sprawę.
źródło
Spowoduje to wyłączenie tekstu edycji .
I używając tego
Sprawi, że Edittext nie pokaże klawiatury programowej, ale jeśli jest podłączony do fizycznej klawiatury, pozwoli ci pisać.
źródło
Korzystam z Google nowo wydanej biblioteki projektowania materiałów. W moim przypadku działa, gdy korzystam z Androida: focusable = "false" i android: cursorVisible = "false"
źródło
W moim przypadku musiałem
EditText
przewijać tekst, jeśli nie. linii przekracza,maxLines
gdy jest wyłączony. Ta implementacja działała dla mnie idealnie.źródło
Wypróbuj ten, działa dobrze dla mnie:
Uwaga: Należy dodać
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
na swojej działalności, albokeyboard
będzie popup na pierwszy raz.źródło
Jak niektórzy wspominają o tym, jeśli wyłączysz editText, stanie się szary, a jeśli ustawisz false, ustawiając fokus, kursor będzie wyświetlał.
Jeśli chcesz to zrobić tylko za pomocą XML, to załatwiło sprawę
Po prostu dodaję FrameLayout, który pojawia się nad editText, i ustawiam fokus i klikalne, aby editText nie mógł zostać kliknięty.
źródło
To działa dla mnie:
android: focusable = "false"
źródło
Z komentarza @ Asymptote na zaakceptowanej odpowiedzi użyj:
... a Bob jest twoim wujem.
źródło
Dziś nadal używam
editable="false"
, ale także zfocusable="false"
.Myślę, że przypadek, w którym musimy uczynić EditText niemożliwym do edycji, jest dlatego, że chcemy zachować jego styl EditText (z tym podkreśleniem, podpowiedzią itp.), Ale akceptuje on inne dane wejściowe zamiast tekstu. Na przykład lista rozwijana.
W takim przypadku konieczne jest
EditText
kliknięcie (dlategoenabled="false"
nie jest odpowiednie). Ustawiającfocusable="false"
tę sztuczkę, nadal mogę długo przytrzymać EditText i wkleić na niego własny tekst ze schowka . W zależności od kodu i obsługi może to nawet spowodować awarię aplikacji.Więc też użyłem
editable="false"
i teraz wszystko jest świetne, z wyjątkiem ostrzeżenia.źródło
możesz użyć,
android:focusable="false"
ale musisz także wyłączyć kursor, inaczej funkcja kopiuj / wklej nadal działałaby.więc użyj
źródło
Istnieje wiele sposobów na osiągnięcie wielu poziomów niepełnosprawności.
editText.setShowSoftInputOnFocus(false);
ieditText.setFocusable
zapobiega
EditText
wyświetlaniu klawiatury - pisanie w tekście. Ale kursor jest nadal widoczny i użytkownik może wkleić tekst.editText.setCursorVisible(false)
ukrywa kursor. Nie jestem pewien, dlaczego chcesz to zrobić. Użytkownik może wprowadzić tekst i wkleić.
editText.setKeyListener(null)
Uważam tę drogę za najwygodniejszą. Nie ma sposobu, w jaki użytkownik może wprowadzić tekst, ale widżet nadal działa,
OnClickListener
jeśli chcesz uruchomić akcję, gdy użytkownik go dotknieeditText.setEnabled(false);
całkowicie wyłącza
EditText
. Jest dosłownie „tylko do odczytu”, użytkownik nie może wprowadzić w nim żadnego tekstu i (na przykład)OnClickListener
nie działa z nim.Dokumentacja TextEdit
źródło
Ustaw to w kodzie XML, działa.
android: focusableInTouchMode = "false"
źródło