Respostas:
O Android, na verdade, possui um InputFilter interno apenas para isso !
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
Tenha cuidado, setFilters
irá repor todos os outros atributos que foram definidos via XML (ou seja maxLines
, inputType
, imeOptinos
...). Para evitar isso, adicione filtro (s) aos já existentes.
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
), tente anexar a matriz InputFilter.AllCaps()
to editText.getFilters
. Veja stackoverflow.com/a/18934659/3890983
editText.filters = editText.filters + InputFilter.AllCaps()
editText.filters += InputFilter.AllCaps()
Kotlin é maravilhoso! <3
Se você deseja forçar o usuário a escrever em letras maiúsculas por padrão no seu EditText, basta adicionar android:inputType="textCapCharacters"
. (O usuário ainda pode alterar manualmente para minúsculas.)
Defina input type
como TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
. O keyboard
deve honrar isso.
Você pode usar em dois sentidos.
Primeira maneira:
Defina android:inputType="textCapSentences"
no seu EditText.
Segunda maneira:
Quando o usuário digita o número, você deve usar o observador de texto e alterar pequeno para letra maiúscula.
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
}
}
});
Você pode adicionar a android:textAllCaps="true"
propriedade ao seu arquivo xml no EditText. Isso fará com que o teclado de entrada suave apareça no modo todas maiúsculas. O valor digitado aparecerá em maiúsculas. No entanto, isso não garante que o usuário possa digitar apenas UpperCase
letras. Se eles quiserem, ainda podem voltar para as letras minúsculas. Se você deseja garantir que a saída de Edittext
esteja em Todos os caps, é necessário converter manualmente a String de entrada usando o toUpperCase()
método da String
classe
android:textAllCaps="true"
é apenas uma propriedade do TextView ( stackoverflow.com/a/28803492/5268730 ). Use em android:inputType="textCapCharacters"
vez disso.
Você deve colocar android:inputType="textCapCharacters"
com Edittext no arquivo xml.
Em vez de se preocupar em lidar com o teclado, por que não aceitar qualquer entrada, minúscula ou maiúscula e converter a string em maiúscula?
O código a seguir deve ajudar:
EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase
Isso é fácil de usar, pois não é necessário que o usuário saiba que você precisa da sequência em maiúsculas. Espero que isto ajude.
Melhor ainda ... um forro em Kotlin ...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
Feito!
<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
<your_edit_text>.filters += InputFilter.AllCaps()
No kotlin , no arquivo .kt, faça as alterações:
edit_text.filters = edit_text.filters + InputFilter.AllCaps()
Use propriedade sintética para acesso direto ao widget com o ID. E em XML, para o seu texto de edição, adicione mais alguns sinalizadores como:
<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"
/>
Isso atualizará o teclado como maiúscula ativado.
Use filtro de entrada
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());
}
});
Apenas faça o seguinte:
// ****** 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"
Para mim, funcionou adicionando 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"
/>
Para obter todo o capital, use o seguinte em seu XML:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
Com base na resposta aceita, essa resposta faz o mesmo, mas em Kotlin. Apenas para facilitar o copypasting: ·)
private fun EditText.autocapitalize() {
val allCapsFilter = InputFilter.AllCaps()
setFilters(getFilters() + allCapsFilter)
}
filters += InputFilter.AllCaps()
: D
Para obter um teclado com letras maiúsculas ao clicar em edittext, use este código no seu 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"
/>
Estou usando o Visual Studio 2015 / Xamarin para criar meu aplicativo para Android 5.1 e Android 6.0 (mesmo apk instalado em ambos).
Quando especifiquei android:inputType="textCapCharacters"
no meu axml, o teclado AllCaps apareceu como esperado no Android 6.0, mas não no Android 5.1. Eu adicionei android:textAllCaps="true"
à minha axml e ainda sem teclado Allcaps no Android 5.1. EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Defino um filtro usando e enquanto o teclado virtual mostra caracteres minúsculos no Android 5.1, o campo de entrada agora é AllCaps.
EDIT: As diferenças comportamentais que observei e presumi serem relacionadas ao sistema operacional eram, na verdade, porque eu tinha versões diferentes do teclado do Google nos dispositivos de teste. Depois que atualizei os dispositivos para o teclado do Google mais recente (lançado em julho de 2016), o comportamento de 'All Caps' era consistente em todos os sistemas operacionais. Agora, todos os dispositivos mostram caracteres minúsculos no teclado, mas a entrada é All Caps por causa deSetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Xamarin equivalente da resposta de ErlVolton:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
Simplesmente, adicione o código abaixo ao seu EditText do seu arquivo xml.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
E se você deseja permitir texto e dígitos em maiúsculas, use o código abaixo.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
embora.