簡體   English   中英

Kotlin 中的自定義數字鍵盤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM