Di Android EditText, bagaimana cara memaksa penulisan huruf besar?


144

Dalam aplikasi Android saya, saya memiliki perbedaan di EditTextmana pengguna dapat memasukkan informasi. Tapi saya harus memaksa pengguna untuk menulis dalam huruf besar. Apakah Anda tahu fungsi untuk melakukan itu?

Jawaban:


340

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);

3
Iya! Ini jawaban terbaik! Kode seharusnya edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});.
Arthur

4
OK kalian benar, saya memperbarui jawaban saya. Terima kasih telah membantu meningkatkan ini !!
ErlVolton

4
Untuk menghindari mengganti filter yang Anda atur pada xml (untuk mis. maxLength), Cobalah untuk menambahkan array InputFilter.AllCaps()ke editText.getFilters. Lihat stackoverflow.com/a/18934659/3890983
tropicalfish

21
Atau di Kotlin sajaeditText.filters = editText.filters + InputFilter.AllCaps()
Ilia Kurtov

4
Lebih baik lagi: editText.filters += InputFilter.AllCaps()Kotlin luar biasa! <3
Milack27

123

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.)


39
tidak ada yang mencegah Pengguna menekan 'shift' dan menulis surat dengan huruf kecil.
Fernando Leal

Setuju dengan Fernando, meskipun keyboard standar untuk tutup, itu tidak mengharuskan mereka.
pforhan

Pengguna dapat menggunakan tombol shift untuk memasukkan huruf kecil seperti yang dikatakan oleh @Fernando
Ajinkya

24

Setel input typeke TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS. The keyboardharus menghormati itu.


android: inputType = "textCapCharacters"
Parth Kapoor

18

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
      }
    }
});  

2
solusi Anda tidak berfungsi karena menetapkan string pada urutan terbalik.
co2f2e

mana yang Anda gunakan pertama atau kedua.
Harshid

Yang pertama tidak berfungsi sama sekali. Yang kedua membuat teks huruf besar tetapi kita harus mengatur kursor ke akhir kalimat secara terprogram.
co2f2e

@Kalanamith ya lalu apa masalahnya
Harshid

6
Untuk opsi pertama textCapSentences memberi huruf kapital pada kalimat, Anda memerlukan textCapCharacters.
Ghoti

13

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 UpperCasehuruf. Jika mereka mau, mereka masih bisa kembali ke huruf kecil. Jika Anda ingin memastikan bahwa output Edittextdalam Semua huruf besar, maka Anda harus secara manual mengkonversi String input menggunakan toUpperCase()metode Stringkelas.


@ GustavoAlves, Bisakah Anda memberi tahu saya apa yang terjadi ketika Anda mencoba ini? Mungkin saya bisa melihat masalah Anda. :)
Abhishek

Hai @Abhishek. Pengaturan properti tidak mengubah apa pun. EditText masih menerima karakter huruf besar dan kecil.
Gus Costa

1
Ya jika Anda ingin membatasi EditText Anda hanya untuk menerima huruf besar maka untuk Anda, android: inputType = "textCapCharacters" akan menjadi pilihan yang tepat. Cobalah dan beri tahu saya. ☺️
Abhishek

1
Ini menyebabkan dan indeks keluar dari batas pengecualian ketika setiap saya mengetik.
Zapnologica

2
android:textAllCaps="true"hanya properti dari TextView ( stackoverflow.com/a/28803492/5268730 ). Gunakan android:inputType="textCapCharacters"sebagai gantinya.
woodii

11

Anda harus meletakkan android:inputType="textCapCharacters"dengan Edittext dalam file xml.


9
AoyamaNanami menulis jawaban yang persis sama. Harap fokus pada pertanyaan terkini, yang ini berasal dari 2013. :)
ByteHamster

2
Perhatikan bahwa pengguna dapat menggeser dan memasukkan karakter yang lebih rendah
Rafa0809

10

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.


9

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!


2
Anda dapat menulisnya menggunakan sintaks akses properti: <your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
Makotosan

8
Lebih baik lagi:<your_edit_text>.filters += InputFilter.AllCaps()
Makotosan

9

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.


8

Gunakan filter input

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});

6
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());
    }
});  

6

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"

5

Coba gunakan salah satu dari kode di bawah ini untuk menyelesaikan masalah Anda.

secara terprogram:

editText.filters = editText.filters + InputFilter.AllCaps()

XML:

android:inputType="textCapCharacters" with Edittext

4

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"
                    />

3

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"
/>

2
Sudahkah Anda mencoba solusi ini? ini mengakibatkan crash aplikasi ketika pengguna mulai mengedit konten editext
surhidamatya

3

coba kode ini akan membuat input Anda menjadi huruf besar

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

2

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)
}

1
filters += InputFilter.AllCaps(): D
crgarridos

1

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"
    />

1

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() });


1
Hai Tony, sepertinya Anda telah membuat 2 akun; stackoverflow.com/users/6764633/tony-celia dan stackoverflow.com/users/6771440/deeveedee . Jika Anda ingin menggabungkan mereka, lihat stackoverflow.com/help/merging-accounts .
Matt

Terima kasih, Matt. Kapur yang satu ini hingga pembelajaran pemula / kesalahan. Tidak ingat bahwa saya telah membuat akun lain sampai Anda menunjukkannya. untungnya, fungsi penggabungan akun itu sederhana. Forum hebat!
Tony

1

Xamarin setara dengan jawaban ErlVolton:

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());

Inilah sebabnya saya suka bagaimana C # bisa begitu ringkas.
Lionet Chen

1

Realisasi kotlin sederhana

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}

PS untuk saya filtersselalu kosong pada awalnya


0

Java 1-liner dari solusi yang diusulkan dapat berupa:

editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
    .toArray(new InputFilter[editText.getFilters().length + 1]));

Perhatikan itu perlu com.google.common.collect.Lists.


-1

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"

2
Itu pasti bekerja, tetapi itu bukan pengalaman pengguna yang sangat menyenangkan. Saya baru saja mencobanya dan karena keyboard tidak autocapitalise (setidaknya pada N), karakter yang diketik dalam huruf kecil hanya diabaikan tanpa umpan balik kepada pengguna, membuat UI tampak rusak.
MattMatt

sepenuhnya setuju dengan @MattMatt. Jika kami melakukannya, pengguna tidak akan dapat mengetik huruf kecil. Pengguna harus dapat mengetikkan huruf apa pun yang diinginkannya dan sisanya harus huruf besar secara otomatis
Mir Adnan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.