2010-01-07 11 views

Odpowiedz

33

android:password jest przestarzała, ale AFAIK jest to jedyny sposób, ponieważ android:inputType="phone|textPassword" jest ignorowany ...

<EditText 
    android:id="@+id/EditText01" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:password="true" 
    android:inputType="phone" /> 
+0

Ah, interesujące. Nie widziałem, żeby był przestarzały. Oto dokumentacja, która mówi o 'inputType' jest drogą do zrobienia (jak wspomina Roman): http://developer.android.com/reference/android/R.attr.html#password –

+1

Jako mały dodatek, dla tych, którzy chcą zrobić rzeczy z kodu: editText.setInputType (InputType.TYPE_CLASS_PHONE); editText.setTransformationMethod (PasswordTransformationMethod.getInstance()); –

+2

inputType = "numberPassword" jest prawdopodobnie najlepszą opcją, ale jest dostępna tylko wtedy, gdy min. SDK Twojej aplikacji jest> = 3.0 (Honeycomb) – k2col

0

nie próbowałem tego, ale może to być możliwe, aby połączyć dwa tak:

android:inputType="textPassword|phone" 

od inputType może przybierać wiele wartości.

+0

To nie działa. EditText ignoruje textPassword i po prostu ustawia na telefon – Portablejim

+1

Przepraszam za to, moja odpowiedź była po prostu wykształconym domysłem bez testowania. Fragment dtmilano wydaje się być właściwą drogą. –

1

Ten problem można rozwiązać bez użycia przestarzałe android:password. Zobacz moją odpowiedź here.

+0

Jak myślisz, jak działa android: hasło? ;) Tak, jest to przestarzały atrybut XML, ale jaki kod jest wykonywany w środowisku wykonawczym, gdy atrybut jest prezentowany? –

2

Nie znalazłem odpowiedniego rozwiązania tego problemu. Przyjęte rozwiązanie dtmilano nie działa w pełni. Jeśli EditText jest skupiony w trybie poziomym, w którym masz klawiaturę pełnoekranową, cyfry nadal są wyświetlane w czystym tekście, a nie zamaskowane.

Spędziłem znaczny czas przeglądając rzeczywisty kod TextView, a powodem tego jest problem polegający na jawnym sprawdzeniu InputType na InputType.TYPE_CLASS_TEXT i, jeśli dobrze pamiętam, TYPE_MASK_CLASS. Jeśli więc zawarłeś jakiekolwiek inne InputType w tych granicach (myślę, że zakres używany przez TYPE_CLASS_TEXT i TYPE_MASK_CLASS jest pierwszym bajtem), to nie zostanie rozpoznany jako hasło, które wymaga maskowania.

Wiem, że to, co powiedziałem, jest dość mylące. Rzeczywisty kod jest dużo bardziej mylący. Byłem bardzo zbulwersowany kodeksem TextView, mówiąc szczerze. To splątany bałagan z wszędzie zakodowanymi próbami. Okropna praktyka kodowania, która prowadzi do takich problemów.

5

Uważam, że tego właśnie chcesz?

android:inputType="numberPassword" 

Edit: W momencie zapytania (2010) to może nie być w API, ale dla współczesnego rozwoju, jest ona dostępna.

Powiązane problemy