9

Sto cercando di creare uno EditText con la maiuscola automatica e la correzione automatica implementata. Ho capito manualmente come aggiungere InputFilter s per consentire l'auto-capitalizzazione, anche se questo funziona solo dopo la prima lettera viene digitato, e non ho avuto fortuna con correzione automatica (ho cercato di creare un InputFilter che ha usato AutoText, ma Non sono sicuro di come tutto funzioni). Idealmente, potrei semplicemente usare EditText.setInputType (...) per gestire tutto, ma finora questo non ha funzionato. C'è un modo per ottenere questo? Il mio tentativo fallito è mostrato sotto (ho appena ricevuto input normale).Come imposto più tipi di input in un EditText su Android?

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); 

Si prega di notare, mi interessa solo in soluzioni per la creazione di questo EditText nel codice - non tramite XML.

Modifica

ho trovato il suono nuova documentazione che descrive TextKeyListener, tuttavia dopo aver tentato di usare questo:

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

e usando idea di @ farble1670 di utilizzare setRawInputType, in modo da non influenzare il KeyListener s, non c'è ancora alcuna modifica al testo.

risposta

2

sì, sembra che dovrebbe funzionare. Tuttavia, guardando la documentazione,

Il tipo di dati di essere immessi in un campo di testo, utilizzato per aiutare un metodo di input decidere come consentire all'utente di inserire del testo. Le costanti qui corrispondono a quelle definite da InputType. In genere è possibile selezionare un valore singolo , sebbene alcuni possano essere combinati insieme come indicato. L'impostazione di questo attributo su qualsiasi valore oltre a nessuno implica anche che il testo sia modificabile.

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

così sembra che in generale, non si può aspettare di impostare due valori.

Inoltre, se si guarda ad Android: setInputType, si dice che questo mappa al metodo setRawInputType(), non setInputType(). potresti provare a chiamare setRawInputType() invece di setInputType().

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

+0

Grazie, questo mi ha portato in una nuova direzione, e ho trovato il 'TextKeyListener'. L'unica cosa è che non sembra funzionare neanche ... – Phil

29

Attraverso XML sarebbe messa a punto in questo modo.

android:inputType="textMultiLine|textNoSuggestions" 

È sufficiente aggiungere un tubo (|) tra le variabili. Vedo che lo stavi facendo attraverso il codice, ma stavo proprio lanciando questo per riferimento.

+1

la mia domanda specifica che non sono interessato a una soluzione 'XML'. – Phil

+2

Ho trovato la tua domanda durante la ricerca, stavo mettendo la soluzione XML per la prossima persona che trova questo, ma stavo cercando una soluzione XML come me .... – f1vefour

6

Spero che tu abbia trovato una risposta alla domanda. La risposta potrebbe aiutare quelli che vengono al thread in seguito. Quindi, puoi impostare più tag in modo simile a quello che usi XML con un | (pipe). Qualcosa di simile:

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

Inoltre, a seconda del vostro situation si potrebbe desiderare di utilizzare setInputType o setRawInputype.

+0

Questa è la soluzione corretta. – Tommie