Tanda inputType
numberDecimal
masuk EditText
menggunakan titik '.' sebagai pemisah desimal. Di Eropa, biasanya menggunakan koma ',' sebagai gantinya. Meskipun lokal saya disetel sebagai bahasa jerman, pemisah desimal masih menjadi '.'
Apakah ada cara untuk mendapatkan koma sebagai pemisah desimal?
Jawaban:
Sebuah solusi (sampai Google memperbaiki bug ini) adalah dengan menggunakan
EditText
denganandroid:inputType="numberDecimal"
danandroid:digits="0123456789.,"
.Kemudian tambahkan TextChangedListener ke EditText dengan afterTextChanged berikut:
sumber
Variasi pada solusi 'digit' yang ditawarkan di sini:
Dengan mempertimbangkan pemisah lokal.
sumber
,
di keyboard mereka. Contoh: Keyboard Samsung (KitKat).Kode Mask Mata Uang Berikut untuk EditText ($ 123.125.155)
Tata Letak Xml
Kode
sumber
Ini adalah bug yang dikenal di Android SDK. Satu-satunya solusi adalah membuat keyboard lunak Anda sendiri. Anda dapat menemukan contoh implementasi di sini .
sumber
Jawaban Martins tidak akan berfungsi jika Anda membuat EditText secara terprogram. Saya melanjutkan dan memodifikasi
DigitsKeyListener
kelas yang disertakan dari API 14 untuk memungkinkan koma dan periode sebagai pemisah desimal.Untuk menggunakan ini, sebut
setKeyListener()
padaEditText
, misalnyaNamun, Anda masih harus menggunakan trik Martin di
TextChangedListener
mana Anda mengganti koma dengan titiksumber
Anda dapat menggunakan yang berikut untuk lokal yang berbeda
sumber
Anda dapat menggunakan solusi berikut untuk memasukkan koma sebagai input yang valid: -
Melalui XML:
Secara terprogram:
Dengan cara ini sistem Android akan menampilkan keyboard angka dan memungkinkan input koma. Semoga ini menjawab pertanyaan :)
sumber
Untuk solusi Mono (Droid):
sumber
Anda dapat melakukan hal berikut:
Dan kemudian Anda bisa menggunakan filter input:
}
sumber
IMHO pendekatan terbaik untuk masalah ini adalah dengan hanya menggunakan InputFilter. Inti yang bagus ada di sini DecimalDigitsInputFilter . Maka Anda bisa:
sumber
untuk melokalkan penggunaan input Anda:
lalu tambahkan:
daripada jangan lupa untuk mengganti "," dengan "." jadi Float atau Double dapat menguraikannya tanpa kesalahan.
sumber
Semua posting lain di sini memiliki lubang besar di dalamnya, jadi inilah solusi yang akan:
Dalam XML:
Variabel kelas:
Di onCreate, cari pemisah yang digunakan di lokal saat ini:
Juga diCreate, Gunakan ini untuk memperbaruinya jika Anda memuat dalam nilai saat ini:
Juga onCreate, Add the Listeners
editTextWatcher
Contoh doSomething (), konversikan ke periode standar untuk manipulasi data
sumber
Android memiliki pemformat angka bawaan.
Anda dapat menambahkan ini ke Anda
EditText
untuk memungkinkan desimal dan koma:android:inputType="numberDecimal"
danandroid:digits="0123456789.,"
Kemudian di suatu tempat dalam kode Anda, baik ketika pengguna mengklik simpan atau setelah teks dimasukkan (gunakan pendengar).
sumber
Saya memutuskan untuk mengubah koma ke titik hanya saat mengedit. Berikut ini solusi sederhana dan rumit yang saya lakukan:
someDecimalFormatter akan menggunakan koma atau titik tergantung pada Lokal
sumber
Saya tidak tahu mengapa jawaban Anda sangat rumit. Jika ada bug di SDK Anda harus menimpanya atau berkeliling.
Saya telah memilih cara kedua untuk menyelesaikan masalah itu. Jika Anda memformat string Anda sebagai
Locale.ENGLISH
dan kemudian memasukkannya keEditText
(bahkan sebagai string kosong). Contoh:String.format(Locale.ENGLISH,"%.6f", yourFloatNumber);
Mengejar solusi itu hasil Anda kompatibel dengan keyboard yang ditampilkan. Kemudian float dan angka ganda bekerja secara tipikal untuk bahasa pemrograman dengan titik alih-alih koma.
sumber
Solusi saya adalah:
Dalam kegiatan utama:
char separator =DecimalFormatSymbols.getInstance().getDecimalSeparator(); textViewPitchDeadZone.setKeyListener(DigitsKeyListener.getInstance("0123456789" + separator));
Dalam file xml:
android:imeOptions="flagNoFullscreen" android:inputType="numberDecimal"
dan saya mengambil ganda di editText sebagai String.
sumber
Saya dapat mengonfirmasi bahwa perbaikan yang diajukan tidak berfungsi pada IME Samsung (setidaknya pada S6 dan S9) dan mungkin LG. Mereka masih menunjukkan titik sebagai pemisah desimal terlepas dari lokal. Beralih ke IME Google memperbaikinya tetapi hampir tidak menjadi pilihan bagi sebagian besar pengembang.
Ini juga belum diperbaiki di Oreo untuk keyboard ini karena ini adalah perbaikan yang harus dilakukan oleh Samsung dan / atau LG dan kemudian mendorong bahkan ke handset kuno mereka.
Saya telah bukannya bercabang yang proyek nomor-keyboard dan menambahkan modus mana berperilaku seperti IME: garpu . Lihat contoh proyek untuk detailnya. Ini telah bekerja cukup baik untuk saya dan mirip dengan banyak IME palsu "entri PIN" yang Anda lihat di aplikasi perbankan.
sumber
Sudah lebih dari 8 tahun berlalu dan saya terkejut, masalah ini belum diperbaiki ...
Saya kesulitan dengan masalah sederhana ini karena jawaban yang paling banyak dipilih oleh @Martin memungkinkan mengetik beberapa pemisah, yaitu pengguna dapat mengetikkan "12 ,,, ,,, 12,1,, 21,2, "
Juga, perhatian kedua adalah bahwa pada beberapa perangkat koma tidak ditampilkan pada keyboard numerik (atau memerlukan beberapa penekanan tombol dot)
Ini adalah solusi penyelesaian masalah saya, yang memecahkan masalah yang disebutkan dan memungkinkan pengguna mengetik '.' dan ',', tetapi dalam EditText ia akan melihat satu-satunya pemisah desimal yang sesuai dengan lokal saat ini:
Dan pengamat teks:
sumber
Solusi sederhana, buat kontrol khusus. (ini dibuat di Xamarin android tetapi harus port dengan mudah ke java)
sumber
Anda dapat menggunakan
inputType="phone"
, namun dalam hal ini Anda harus berurusan dengan banyak,
atau.
hadir, sehingga validasi tambahan akan diperlukan.sumber
Saya pikir solusi ini kurang kompleks daripada yang lain yang ditulis di sini:
Dengan cara ini saat Anda menekan '.' di keyboard lunak tidak ada yang terjadi; hanya angka dan koma yang diizinkan.
sumber