9

Próbuję utworzyć EditText z zaimplementowaną automatyczną kapitalizacją i automatyczną korektą. Ręczne ustalenie, jak dodać InputFilter s, aby umożliwić automatyczne kapitalizacja, ale działa tylko po pierwsza litera jest wpisana, a ja nie miałem szczęścia z automatyczną korektą (próbowałem stworzyć InputFilter, który użył AutoText, ale Nie jestem pewien, jak to wszystko działa). Idealnie, mógłbym użyć EditText.setInputType (...), aby obsłużyć wszystko, ale jak dotąd to nie zadziałało. Czy istnieje sposób, aby to osiągnąć? Moja nieudana próba została pokazana poniżej (po prostu otrzymuję normalne dane wejściowe).Jak ustawić wiele typów danych wejściowych w EditText na Androidzie?

EditText mEditText = new EditText(this); 
int inputType = InputType.TYPE_CLASS_TEXT; 
if (auto_capitalize) { 
    inputType = mEditText.getInputType() | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS; 
} 
if (auto_correct) { 
    inputType = mEditText.getInputType() | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT; 
} 
mEditText.setInputType(inputType); 

Należy pamiętać, że jestem zainteresowany tylko w rozwiązaniach dla tworzenia tej EditText w kodzie - nie za pomocą XML.

Edit

znalazłem dźwięk nowa dokumentacja opisująca TextKeyListener jednak po próbuje to wykorzystać:

mEditText.setKeyListener(new TextKeyListener(TextKeyListener.Capitalize.CHARACTERS, true)); 

i używając pojęcia @ farble1670 za korzystania setRawInputType, tak aby nie wpływać na KeyListener s, wciąż nie ma zmian w tekście.

Odpowiedz

2

tak, wygląda na to, że powinno zadziałać. Jednak patrząc na docs,

Rodzaj danych wprowadzanych w polu tekstowym, używany do pomocy metody wejścia określić sposób, aby użytkownik mógł wprowadzić tekst. Stałe tutaj odpowiadają wartościom zdefiniowanym przez InputType. Zasadniczo można wybrać pojedynczą wartość, ale niektóre można łączyć ze sobą, jak wskazano. Ustawienie tego atrybutu na dowolną wartość oprócz braku oznacza również, że tekst można edytować.

http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType

tak to wygląda w ogóle, nie można oczekiwać, aby ustawić dwie wartości.

także, jeśli spojrzysz na androida: setInputType, mówi, że mapuje to do metody setRawInputType(), a nie setInputType(). możesz spróbować wywołać setRawInputType() zamiast setInputType().

http://developer.android.com/reference/android/widget/TextView.html#setRawInputType(int)

+0

Dzięki, doprowadziłem mnie do nowego kierunku i znalazłem 'TextKeyListener'. Jedno jest pewne - to też nie działa ... – Phil

29

poprzez XML byłoby tak jak setup.

android:inputType="textMultiLine|textNoSuggestions" 

Wystarczy włożyć rurę (|) między zmiennymi. Widzę, że robiłeś to za pomocą kodu, ale właśnie wyrzuciłem to tam dla odniesienia.

+1

moje pytanie wyraźnie stwierdza, że ​​nie interesuje mnie rozwiązanie "XML". – Phil

+2

Znalazłem twoje pytanie podczas wyszukiwania, wprowadziłem rozwiązanie XML dla następnej osoby, która znalazła to, ale szukało rozwiązania XML, tak jak byłem .... – f1vefour

6

Mam nadzieję, że znalazłeś odpowiedź na to pytanie. Odpowiedź może pomóc tym, którzy przyszli do wątku później. Możesz więc ustawić wiele tagów w podobny sposób, jak w XML przy użyciu | (pipe). Coś jak:

EditText mEditText = new EditText(this); 
mEditText.setInputType(InputTpe.TYPE_TEXT_FLAG_CAP_CHARACTERS|InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); 

Ponadto, w zależności od situation może chcesz używać setInputType lub setRawInputype.

+0

To jest poprawne rozwiązanie. – Tommie