Jawaban:
Android sebenarnya memiliki InputFilter bawaan hanya untuk ini !
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
Hati-hati, setFilters
akan mengatur ulang semua atribut lain yang ditetapkan melalui XML (mismaxLines
, inputType
, imeOptinos
...). Untuk mencegah hal ini, tambahkan Anda Filter ke yang sudah ada.
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
), Cobalah untuk menambahkan array InputFilter.AllCaps()
ke editText.getFilters
. Lihat stackoverflow.com/a/18934659/3890983
editText.filters = editText.filters + InputFilter.AllCaps()
editText.filters += InputFilter.AllCaps()
Kotlin luar biasa! <3
Jika Anda ingin memaksa pengguna untuk menulis dalam huruf besar secara default di EditText Anda, Anda hanya perlu menambahkan android:inputType="textCapCharacters"
. (Pengguna masih dapat mengubah secara manual menjadi huruf kecil.)
Setel input type
ke TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
. The keyboard
harus menghormati itu.
Anda bisa menggunakan dua arah.
Cara pertama:
Set android:inputType="textCapSentences"
pada EditText Anda.
Jalan kedua:
Ketika pengguna memasukkan nomor Anda harus menggunakan pengamat teks dan mengubah kecil menjadi huruf kapital.
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
}
}
});
Anda dapat menambahkan android:textAllCaps="true"
properti ke file xml Anda di EditText. Ini akan memaksa keyboard softinput muncul di semua mode caps. Nilai yang Anda masukkan akan muncul di Huruf Besar. Namun, ini tidak akan memastikan bahwa pengguna hanya dapat memasukkan UpperCase
huruf. Jika mereka mau, mereka masih bisa kembali ke huruf kecil. Jika Anda ingin memastikan bahwa output Edittext
dalam Semua huruf besar, maka Anda harus secara manual mengkonversi String input menggunakan toUpperCase()
metode String
kelas.
android:textAllCaps="true"
hanya properti dari TextView ( stackoverflow.com/a/28803492/5268730 ). Gunakan android:inputType="textCapCharacters"
sebagai gantinya.
Anda harus meletakkan android:inputType="textCapCharacters"
dengan Edittext dalam file xml.
Daripada khawatir berurusan dengan keyboard, mengapa tidak hanya menerima input, huruf kecil atau huruf besar dan mengubah string menjadi huruf besar?
Kode berikut akan membantu:
EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase
Ini ramah pengguna karena tidak perlu bagi pengguna untuk mengetahui bahwa Anda memerlukan string dalam huruf besar. Semoga ini membantu.
Bahkan lebih baik ... satu liner di Kotlin ...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
Selesai!
<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
<your_edit_text>.filters += InputFilter.AllCaps()
Di kotlin , dalam file .kt buat perubahan:
edit_text.filters = edit_text.filters + InputFilter.AllCaps()
Gunakan properti sintetis untuk akses langsung widget dengan id. Dan dalam XML, untuk teks edit Anda tambahkan beberapa tanda lagi sebagai:
<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"
/>
Ini akan memperbarui keyboard sebagai huruf besar diaktifkan.
Gunakan filter 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());
}
});
Lakukan saja ini:
// ****** 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"
Bagi saya ini bekerja dengan menambahkan android: textAllCaps = "true" dan 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"
/>
Untuk mendapatkan semua modal, gunakan yang berikut ini di XML Anda:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
Berdasarkan jawaban yang diterima, jawaban ini melakukan hal yang sama, tetapi di Kotlin. Hanya untuk memudahkan copypasting: ·)
private fun EditText.autocapitalize() {
val allCapsFilter = InputFilter.AllCaps()
setFilters(getFilters() + allCapsFilter)
}
filters += InputFilter.AllCaps()
: D
Untuk mendapatkan papan ketik kapital saat klik edittext gunakan kode ini di xml Anda,
<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"
/>
Saya menggunakan Visual Studio 2015 / Xamarin untuk membangun aplikasi saya untuk Android 5.1 dan Android 6.0 (apk sama diinstal pada keduanya).
Ketika saya tentukan android:inputType="textCapCharacters"
di axml saya, keyboard AllCaps muncul seperti yang diharapkan pada Android 6.0, tetapi bukan Android 5.1. Saya menambahkan android:textAllCaps="true"
ke axml saya dan masih tidak ada keyboard AllCaps di Android 5.1. Saya menetapkan filter menggunakan EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });
dan sementara keyboard lunak menunjukkan karakter huruf kecil pada Android 5.1, bidang input sekarang AllCaps.
EDIT: Perbedaan perilaku yang saya amati dan diasumsikan terkait OS sebenarnya karena saya memiliki berbagai versi Google Keyboard pada perangkat uji. Setelah saya memperbarui perangkat ke Google Keyboard terbaru (dirilis Juli 2016 saat tulisan ini dibuat), perilaku 'Semua Caps' konsisten di seluruh OS. Sekarang, semua perangkat menunjukkan karakter huruf kecil pada keyboard, tetapi inputnya adalah Semua Huruf karenaSetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Xamarin setara dengan jawaban ErlVolton:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
Cukup, Tambahkan kode di bawah ini ke EditText file xml Anda.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dan jika Anda ingin membolehkan teks huruf besar dan angka, gunakan kode di bawah ini.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
.