[英]Custom Numeric Keyboard in Kotlin
我需要使用 Kotlin 在 Android Studio 中創建一個自定義數字鍵盤。 我使用鍵盤按鈕(從 0 到 9 和一個刪除按鈕)和顯示結果的 TextInputEditText 成功實現了視圖。 我還在片段中實現了按鈕:
result = binding.editTextInsert
// Data input buttons
val button0: AppCompatButton = binding.button0
...
val buttonDelete: ImageButton = binding.buttonDelete
val listener = View.OnClickListener { v ->
val b = v as AppCompatButton
result.append(b.text)
}
button0.setOnClickListener(listener)
...
但我想以十進制格式 0.00 自動格式化 TextInputEditText:
如果用戶按 1 則變為 0.01 而不是 1
如果他輸入 100,則 TextInputEditText 中的值必須格式化為 1.00。
我認為這可以通過使用 TextWatcher 和循環來完成,但我不知道如何實現。
編輯基於此處的正確答案
binding.editTextInsert.addTextChangedListener(object: TextWatcher {
override fun afterTextChanged(s: Editable?) {
var current: String = ""
if (s.toString() != current) {
result.removeTextChangedListener(this)
val cleanString: String = s!!.replace("""[$,.]""".toRegex(), "")
val parsed: BigDecimal =
BigDecimal(cleanString).setScale(2, BigDecimal.ROUND_FLOOR)
.divide(BigDecimal(100), BigDecimal.ROUND_FLOOR)
val formatted: String = NumberFormat.getCurrencyInstance().format(parsed)
current = parsed.toString()
result.setText(parsed.toString())
result.setSelection(parsed.toString().length)
result.addTextChangedListener(this)
}
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { }
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { }
})
嘗試以下
YOUR_EDIT_TEXT.addTextChangedListener {
if (it != null && it.isNotEmpty()) {
val digitsInEditable = Regex("[^\\d]").replace(it.toString(), "").toDoubleOrNull()
if (digitsInEditable != null) {
val textBuilder = StringBuilder("$")
textBuilder.append(String.format("%.2f", digitsInEditable / 100))
val newText = textBuilder.toString()
if (newText != it.toString()) {
it.replace(0, it.length, newText)
}
} else {
it.replace(0, it.length, "")
}
}
}
如果您向 0.00 添加提示而不是向 0.00 添加默認文本會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.