Odpowiedzi:
Android ma wbudowany filtr InputFilter właśnie do tego !
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
Bądź ostrożny, setFilters
zresetuje wszystkie inne atrybuty , które zostały określone przez XML (czyli maxLines
, inputType
, imeOptinos
...). Aby temu zapobiec, dodaj swoje filtry do już istniejących.
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
), Starają się dołączyć InputFilter.AllCaps()
do editText.getFilters
tablicy. Zobacz stackoverflow.com/a/18934659/3890983
editText.filters = editText.filters + InputFilter.AllCaps()
editText.filters += InputFilter.AllCaps()
Kotlin jest cudowny! <3
Jeśli chcesz zmusić użytkownika do pisania wielkimi literami domyślnie w EditText, wystarczy dodać android:inputType="textCapCharacters"
. (Użytkownik nadal może ręcznie zmienić na małe litery).
Ustaw input type
na TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
. keyboard
Powinien szanować to.
Możesz użyć na dwa sposoby.
Pierwszy sposób:
Ustaw android:inputType="textCapSentences"
w EditText.
Drugi sposób:
Kiedy użytkownik wprowadza numer, musisz użyć obserwatora tekstu i zmienić małą na wielką literę.
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
}
}
});
Możesz dodać android:textAllCaps="true"
właściwość do pliku xml w EditText. Spowoduje to wymuszenie wyświetlania klawiatury miękkiej w trybie wielkich liter. Wprowadzona wartość pojawi się wielkimi literami. Nie zapewni to jednak, że użytkownik będzie mógł wprowadzać tylko UpperCase
literami. Jeśli chcą, nadal mogą wrócić do małych liter. Jeśli chcesz mieć pewność, że dane wyjściowe Edittext
są w All Caps, musisz ręcznie przekonwertować wejściowy ciąg przy użyciu toUpperCase()
metody String
class.
android:textAllCaps="true"
jest tylko właściwością TextView ( stackoverflow.com/a/28803492/5268730 ). Użyj android:inputType="textCapCharacters"
zamiast tego.
Powinieneś umieścić android:inputType="textCapCharacters"
Edittext w pliku xml.
Zamiast martwić się o obsługę klawiatury, dlaczego po prostu nie zaakceptować wprowadzenia, małych lub wielkich liter i nie przekonwertować ciągu na duże?
Poniższy kod powinien pomóc:
EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase
Jest to przyjazne dla użytkownika, ponieważ użytkownik nie musi wiedzieć, że potrzebujesz napisu wielkimi literami. Mam nadzieję że to pomoże.
Jeszcze lepiej ... jeden liniowiec w Kotlinie ...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
Gotowe!
<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
<your_edit_text>.filters += InputFilter.AllCaps()
W kotlin , w pliku .kt wprowadź zmiany:
edit_text.filters = edit_text.filters + InputFilter.AllCaps()
Użyj właściwości syntetycznej, aby uzyskać bezpośredni dostęp do widgetu o identyfikatorze. A w XML, do tekstu edycji dodaj kilka dodatkowych flag, takich jak:
<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"
/>
Spowoduje to zaktualizowanie klawiatury z włączoną obsługą wielkich liter.
Użyj filtra wejściowego
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());
}
});
Po prostu zrób to:
// ****** 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"
U mnie zadziałało, dodając android: textAllCaps = "true" i 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"
/>
Aby uzyskać cały kapitał, użyj w swoim kodzie XML:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
Na podstawie zaakceptowanej odpowiedzi ta odpowiedź robi to samo, ale w Kotlinie. Żeby ułatwić copypasting: ·)
private fun EditText.autocapitalize() {
val allCapsFilter = InputFilter.AllCaps()
setFilters(getFilters() + allCapsFilter)
}
filters += InputFilter.AllCaps()
: D
Aby uzyskać klawiaturę pisaną wielkimi literami po kliknięciu edittext, użyj tego kodu w swoim 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"
/>
Używam programu Visual Studio 2015 / Xamarin do tworzenia mojej aplikacji dla systemu Android 5.1 i Android 6.0 (ten sam plik APK jest zainstalowany na obu).
Kiedy android:inputType="textCapCharacters"
podałem w moim axml, klawiatura AllCaps pojawiła się zgodnie z oczekiwaniami w systemie Android 6.0, ale nie w systemie Android 5.1. Dodałem android:textAllCaps="true"
do mojego axml i nadal nie mam klawiatury AllCaps na Androidzie 5.1. EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Ustawiłem filtr za pomocą i podczas gdy klawiatura programowa wyświetla małe litery w systemie Android 5.1, pole wprowadzania to teraz AllCaps.
EDYCJA: Różnice behawioralne, które zaobserwowałem i założyłem, że są związane z systemem operacyjnym, były w rzeczywistości spowodowane tym, że miałem różne wersje Klawiatury Google na urządzeniach testowych. Po zaktualizowaniu urządzeń do najnowszej klawiatury Google (wydanej w lipcu 2016 r. W chwili pisania tego tekstu) zachowanie „All Caps” było spójne we wszystkich systemach operacyjnych. Teraz wszystkie urządzenia wyświetlają małe litery na klawiaturze, ale wejście to wielkie litery z powoduSetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Xamarin odpowiednik odpowiedzi ErlVolton:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
Po prostu dodaj poniższy kod do EditText swojego pliku xml.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
A jeśli chcesz zezwolić zarówno na wielkie litery, jak i cyfry, użyj poniższego kodu.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
jednak.