Câu trả lời:
Android thực sự có InputFilter tích hợp chỉ dành cho việc này !
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
Hãy cẩn thận, setFilters
sẽ đặt lại tất cả các thuộc tính khác mà đã được thiết lập thông qua XML (ví dụ maxLines
, inputType
, imeOptinos
...). Để ngăn chặn điều này, hãy thêm (các) Bộ lọc cho những bộ lọc đã tồn tại.
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
:), hãy thử nối thêm InputFilter.AllCaps()
vào editText.getFilters
mảng. Xem stackoverflow.com/a/18934659/3890983
editText.filters = editText.filters + InputFilter.AllCaps()
editText.filters += InputFilter.AllCaps()
Tuyệt vời của Kotlin! <3
Nếu bạn muốn buộc người dùng viết bằng chữ in hoa theo mặc định trong EditText của bạn, bạn chỉ cần thêm android:inputType="textCapCharacters"
. (Người dùng vẫn có thể tự thay đổi thành chữ thường.)
Đặt input type
thành TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
. Các keyboard
nên tôn trọng điều đó.
Bạn có thể sử dụng hai cách.
Cách thứ nhất:
Đặt android:inputType="textCapSentences"
trên EditText của bạn.
Cách thứ hai:
Khi người dùng nhập số bạn phải sử dụng trình xem văn bản và đổi chữ nhỏ thành chữ in hoa.
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
}
}
});
Bạn có thể thêm thuộc android:textAllCaps="true"
tính vào tệp xml của mình trong EditText. Điều này sẽ bắt buộc bàn phím softinput xuất hiện trong tất cả các chế độ mũ. Giá trị bạn nhập sẽ xuất hiện trong Uppercase. Tuy nhiên, điều này sẽ không đảm bảo rằng người dùng chỉ có thể nhập bằng UpperCase
chữ cái. Nếu họ muốn, họ vẫn có thể rơi lại các chữ cái viết thường. Nếu bạn muốn đảm bảo rằng đầu ra của Edittext
tất cả nằm trong Tất cả các mũ, thì bạn phải chuyển đổi thủ công Chuỗi đầu vào bằng toUpperCase()
phương thức của String
lớp.
android:textAllCaps="true"
chỉ là một thuộc tính của TextView ( stackoverflow.com/a/28804492/5268730 ). Sử dụng android:inputType="textCapCharacters"
thay thế.
Bạn nên đặt android:inputType="textCapCharacters"
với Edittext trong tệp xml.
Thay vì lo lắng về việc làm việc với bàn phím, tại sao không chấp nhận bất kỳ đầu vào, chữ thường hoặc chữ hoa và chuyển đổi chuỗi thành chữ hoa?
Các mã sau đây sẽ giúp:
EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase
Điều này thân thiện với người dùng vì người dùng không cần thiết phải biết rằng bạn cần chuỗi chữ hoa. Hi vọng điêu nay co ich.
Thậm chí tốt hơn ... một lớp lót trong Kotlin ...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
Làm xong!
<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
<your_edit_text>.filters += InputFilter.AllCaps()
Trong kotlin , trong tệp .kt thực hiện thay đổi:
edit_text.filters = edit_text.filters + InputFilter.AllCaps()
Sử dụng tài sản tổng hợp để truy cập trực tiếp của widget với id. Và trong XML, đối với văn bản chỉnh sửa của bạn, hãy thêm một vài cờ nữa như:
<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"
/>
Điều này sẽ cập nhật bàn phím khi bật chữ hoa.
Sử dụng bộ lọc đầu vào
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());
}
});
Chỉ cần làm điều này:
// ****** 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"
Đối với tôi, nó hoạt động bằng cách thêm android: textAllCaps = "true" và android: inputType = "textCapChar character"
<android.support.design.widget.TextInputEditText
android:layout_width="fill_parent"
android:layout_height="@dimen/edit_text_height"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
Để có được tất cả vốn, hãy sử dụng như sau trong XML của bạn:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
Dựa trên câu trả lời được chấp nhận, câu trả lời này cũng tương tự, nhưng trong Kotlin. Chỉ để dễ dàng sao chép: ·)
private fun EditText.autocapitalize() {
val allCapsFilter = InputFilter.AllCaps()
setFilters(getFilters() + allCapsFilter)
}
filters += InputFilter.AllCaps()
: D
Tôi đang sử dụng Visual Studio 2015 / Xamarin để xây dựng ứng dụng của mình cho cả Android 5.1 và Android 6.0 (cùng một apk được cài đặt trên cả hai).
Khi tôi chỉ định android:inputType="textCapCharacters"
trong axml của mình, bàn phím AllCaps xuất hiện như mong đợi trên Android 6.0, nhưng không phải Android 5.1. Tôi đã thêm vào android:textAllCaps="true"
axml của mình và vẫn không có bàn phím AllCaps trên Android 5.1. Tôi đã đặt bộ lọc bằng cách sử dụng EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });
và trong khi bàn phím mềm hiển thị các ký tự chữ thường trên Android 5.1, trường nhập liệu bây giờ là AllCaps.
EDIT: Sự khác biệt về hành vi mà tôi quan sát và cho là có liên quan đến hệ điều hành thực ra là do tôi có các phiên bản Bàn phím Google khác nhau trên các thiết bị thử nghiệm. Khi tôi cập nhật các thiết bị lên Bàn phím Google mới nhất (phát hành vào tháng 7 năm 2016 kể từ khi viết bài này), hành vi 'Tất cả các mũ' là nhất quán trên các hệ điều hành. Bây giờ, tất cả các thiết bị hiển thị các ký tự chữ thường trên bàn phím, nhưng đầu vào là All Caps vìSetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Xamarin tương đương với câu trả lời của ErlVolton:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
Đơn giản, Thêm mã dưới đây vào EditText của tệp xml của bạn.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Và nếu bạn muốn cho phép cả chữ in hoa và chữ số thì hãy sử dụng mã bên dưới.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
mặc dù.