(Android) 无法在使用模式的编辑文本中将点显示为千位分隔符

(Android) Unable to show dot as thousand separator in edit text using a pattern

在这里,我必须根据给定的输入显示货币小数点分隔符和千位分隔符,例如:

    private var decimalSeparator: Char = '.'
    private var thousandSeparator: String = ","

    fun setDecimalSeparator(decimalSeparator: Char) {
        this.decimalSeparator = decimalSeparator
    }

    fun setThousandSeparator(thousandSeparator: String) {
        this.thousandSeparator = thousandSeparator
    }

并且我在 https://stackify.dev/354994-add-comma-as-thousands-separator-for-numbers-in-edittext-for-android-studio

的帮助下为编辑文本字段添加了文本观察器以添加相应的小数点和千位分隔符
field.addTextChangedListener(object : TextWatcher {

            
            override fun afterTextChanged(p0: Editable?) {
                Log.d("CharCount:", p0.toString().length.toString())
                field.removeTextChangedListener(this)

                try {
                    var givenstring: String = p0.toString()
                    if (givenstring.contains(thousandSeparator)) {
                        givenstring = givenstring.replace(thousandSeparator.toRegex(), "")
                    }
                    val longVal: Long = givenstring.toLong()
                    val formatter = DecimalFormat("#$thousandSeparator###$thousandSeparator###")
                    val formattedString = formatter.format(longVal)
                    field.setText(formattedString)
                    field.setSelection(field.text.length)
                    // to place the cursor at the end of text
                } catch (nfe: NumberFormatException) {
                    nfe.printStackTrace()
                } catch (e: Exception) {
                    e.printStackTrace()
                }

                field.addTextChangedListener(this)

            }

            override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                // no need any callback for this.
            }

            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                // no need any callback for this.
            }

        })

thousandSeparator 是句点 (.) 时,这不起作用;谁能帮我这个?。提前致谢。

这就是结果。 我得到了 https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html and https://stackify.dev/354994-add-comma-as-thousands-separator-for-numbers-in-edittext-for-android-studio

的帮助
    field.addTextChangedListener(object : TextWatcher {

            // https://stackify.dev/354994-add-comma-as-thousands-separator-for-numbers-in-edittext-for-android-studio
            override fun afterTextChanged(p0: Editable?) {
                field.removeTextChangedListener(this)

                try {
                    var givenstring: String = p0.toString()
                    if (givenstring.contains(thousandSeparator)) {
                        givenstring = givenstring.replace(thousandSeparator.toString(), "")
                    }
                    val doubleVal: Double = givenstring.toDouble()

                    // https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html
                    val unusualSymbols = DecimalFormatSymbols()
                    unusualSymbols.decimalSeparator = decimalSeparator
                    unusualSymbols.groupingSeparator = thousandSeparator

                    val formatter = DecimalFormat("#,##0.##", unusualSymbols)
                    formatter.groupingSize = 3
                    val formattedString = formatter.format(doubleVal)

                    field.setText(formattedString)
                    field.setSelection(field.text.length)
                    // to place the cursor at the end of text
                } catch (nfe: NumberFormatException) {
                    nfe.printStackTrace()
                } catch (e: Exception) {
                    e.printStackTrace()
                }

                field.addTextChangedListener(this)

            }

            override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                // no need any callback for this.
            }

            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                // no need any callback for this.
            }

        })