2016-02-06 10 views
5

Mam pole EditText, a użytkownik może wprowadzić tylko sześć cyfr. Po ustawieniu ostrości na EditText należy wskazać użytkownikowi, że może wprowadzić tylko sześć cyfr.Wskazówki dla zastępców podczas pisania w EditText w Androidzie

Chodzi o to, aby wyświetlić pozostałe cyfry w kolorze szarym, tak:

Hint for remaining digits

Gdy użytkownik wprowadza cyfrę, wtedy wydaje się tak:

Hint for remaining digits

(Czerwony pionowy pasek oznacza kursor.)

Kursor nie powinien być ustawiony za swoją obecną pozycją w obu obrazach; szare cyfry powinny być widoczne i nie powinny być dostępne do wybrania.

Tak więc chcę ustawić tekst zastępczy, ale zachowuję część tekstu zastępczego podczas pisania.

Przeczytałem o klasie TextInputLayout z biblioteki wsparcia projektu, ale nie wiem, jak mogę osiągnąć powyższy pomysł.

Jak to zrobić?

+0

Czy osiągnąłeś to zachowanie? Nie chodzi mi o wybór szarych symboli, bez pozycji kursora na nich. Thx za odpowiedź –

Odpowiedz

0

Można dodać nad edittext TextView z prawą grawitacją. Następnie w słuchaczu edittext (ontextchanged) zmodyfikuj ten TextView.

Nie wiem, czy można to zrobić tylko za pomocą EditText.

2

Dam ci tylko pomysł, więc wdrożenie należy do Ciebie. Stwórz swój TextWatcher, w

Policz ile cyfr napisał użytkownik iw zależności od tego numeru utwórz ciąg wypełniony zerami. Po tym, zrobić Zera być innego koloru

Spannable textWithTintedZeros = new SpannableString(paddedString); 
textWithTintedZeros.setSpan(new ForegroundColorSpan(yourGrey), firstZeroIndex, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
editText.setText(textWithTintedZeros); 

iw końcu wybór zestawu być przed zerami z

editText.setSelection(indexBeforeFirstZero); 

Nie zapomnij także zablokować zmiany położenia kursora. Myślę, że można zrobić z

View.OnKeyListener 
+0

Spróbuję tego. Zauważ, że gdy ustawimy tekst 'EditText' * wewnątrz * theTimeChanged()' używając 'setText()', metoda 'onTextChanged()' jest nazywana rekursywnie. –

+0

@MCEmperor tak, flaga pomaga, jeśli (! InEdit) {inEdit = true; ... inEdit = false; } – Yaroslav

+0

Tak, myślałem o dokładnie to samo. ;-) –

Powiązane problemy