Risposte:
Android in realtà ha un InputFilter incorporato proprio per questo !
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
Attenzione, setFilters
si ripristinano tutti gli altri attributi che sono stati impostati tramite XML (cioè maxLines
, inputType
, imeOptinos
...). Per evitarlo, aggiungi i filtri a quelli già esistenti.
InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;
<EditText>.setFilters(newFilters);
maxLength
), Cercano di appendere l' InputFilter.AllCaps()
ad editText.getFilters
array. Vedi stackoverflow.com/a/18934659/3890983
editText.filters = editText.filters + InputFilter.AllCaps()
editText.filters += InputFilter.AllCaps()
Kotlin è meraviglioso! <3
Se vuoi forzare l'utente a scrivere in lettere maiuscole per impostazione predefinita nel tuo EditText, devi solo aggiungere android:inputType="textCapCharacters"
. (L'utente può ancora passare manualmente in minuscolo).
Impostare input type
su TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
. L' keyboard
dovrebbe onorare tale.
Puoi usarlo in due modi.
Primo modo:
Imposta android:inputType="textCapSentences"
sul tuo EditText.
Secondo modo:
Quando l'utente immette il numero, è necessario utilizzare l'osservatore di testo e passare da piccolo a maiuscolo.
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable et) {
String s=et.toString();
if(!s.equals(s.toUpperCase()))
{
s=s.toUpperCase();
edittext.setText(s);
edittext.setSelection(edittext.length()); //fix reverse texting
}
}
});
È possibile aggiungere la android:textAllCaps="true"
proprietà al file XML nel EditText. Ciò imporrà che la tastiera dell'ingresso soft appaia in modalità tutto maiuscolo. Il valore inserito apparirà in maiuscolo. Tuttavia, ciò non garantirà che l'utente possa inserire solo UpperCase
lettere. Se lo desiderano, possono ancora ricorrere alle lettere minuscole. Se vuoi assicurarti che l'output di Edittext
sia in Tutte le maiuscole, devi convertire manualmente la stringa di input usando il toUpperCase()
metodo della String
classe.
android:textAllCaps="true"
è solo una proprietà di TextView ( stackoverflow.com/a/28803492/5268730 ). Usa android:inputType="textCapCharacters"
invece.
Dovresti metterlo android:inputType="textCapCharacters"
con Edittext nel file xml.
Piuttosto che preoccuparsi di gestire la tastiera, perché non accettare qualsiasi input, minuscolo o maiuscolo e convertire la stringa in maiuscolo?
Il seguente codice dovrebbe aiutare:
EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase
Questo è intuitivo poiché non è necessario che l'utente sappia che è necessaria la stringa in maiuscolo. Spero che questo ti aiuti.
Ancora meglio ... una fodera a Kotlin ...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
Fatto!
<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
<your_edit_text>.filters += InputFilter.AllCaps()
In kotlin , nel file .kt apporta le modifiche:
edit_text.filters = edit_text.filters + InputFilter.AllCaps()
Utilizzare la proprietà sintetica per l'accesso diretto al widget con ID. E in XML, per il tuo testo di modifica aggiungi un paio di più flag come:
<EditText
android:id="@+id/edit_text_qr_code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...other attributes...
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
Ciò aggiornerà la tastiera come maiuscola abilitata.
Usa il filtro di input
editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable et) {
String s=et.toString();
if(!s.equals(s.toUpperCase()))
{
s=s.toUpperCase();
edittext.setText(s);
}
editText.setSelection(editText.getText().length());
}
});
Basta fare questo:
// ****** Every first letter capital in word *********
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
/>
//***** if all letters are capital ************
android:inputType="textCapCharacters"
Per me ha funzionato aggiungendo android: textAllCaps = "true" e android: inputType = "textCapCharacters"
<android.support.design.widget.TextInputEditText
android:layout_width="fill_parent"
android:layout_height="@dimen/edit_text_height"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
Per ottenere tutto il capitale, utilizzare quanto segue nel proprio XML:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
Basato sulla risposta accettata, questa risposta fa lo stesso, ma in Kotlin. Solo per facilitare il copypasting: ·)
private fun EditText.autocapitalize() {
val allCapsFilter = InputFilter.AllCaps()
setFilters(getFilters() + allCapsFilter)
}
filters += InputFilter.AllCaps()
: D
Per ottenere la tastiera maiuscola quando fai clic su edittext usa questo codice nel tuo XML,
<EditText
android:id="@+id/et"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:hint="Input your country"
android:padding="10dp"
android:inputType="textCapCharacters"
/>
Sto usando Visual Studio 2015 / Xamarin per creare la mia app sia per Android 5.1 che per Android 6.0 (lo stesso apk installato su entrambi).
Quando ho specificato android:inputType="textCapCharacters"
nel mio axml, la tastiera AllCaps è apparsa come previsto su Android 6.0, ma non su Android 5.1. Ho aggiunto android:textAllCaps="true"
al mio axml e ancora nessuna tastiera AllCaps su Android 5.1. Ho impostato un filtro usando EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });
e mentre la tastiera virtuale mostra caratteri minuscoli su Android 5.1, il campo di input ora è AllCaps.
EDIT: Le differenze comportamentali che ho osservato e presunto fossero legate al sistema operativo erano in realtà perché avevo diverse versioni di Google Keyboard sui dispositivi di test. Dopo aver aggiornato i dispositivi con l'ultima tastiera Google (rilasciata a luglio 2016 al momento della stesura di questo documento), il comportamento di "Tutte maiuscole" era coerente tra i sistemi operativi. Ora, tutti i dispositivi mostrano caratteri minuscoli sulla tastiera, ma l'input è Tutte maiuscole a causa diSetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Equivalente Xamarin della risposta di ErlVolton:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
Semplicemente, aggiungi il codice seguente al tuo EditText del tuo file xml.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
E se si desidera consentire sia il testo in maiuscolo che le cifre, utilizzare il codice seguente.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
però.