EditText上的Android小数掩码从右到左填充

时间:2019-05-16 19:51:11

标签: android android-edittext

如何在从右侧填充的EditText上创建遮罩?

例如,初始值为0.0。然后,如果按下1则变为0.1,然后如果按下2则变为1.2,如果用户接下来按下3则达到12.3。

尝试使用库like this,但不允许从右向左填充。

3 个答案:

答案 0 :(得分:0)

我认为您可能会发现this library有用。我检查了图书馆,看起来这符合您的期望。

要包含该库,请在您的build.gradle文件中添加以下内容。

implementation 'com.github.faranjit:currency-edittext:1.0.1'

现在像下面那样使用它。

<faranjit.currency.edittext.CurrencyEditText
    android:id="@+id/edt_currency"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:textColor="@android:color/black" />

希望有帮助!

答案 1 :(得分:0)

您可以在不使用库的情况下进行操作,只需格式化beforeTextChanged()

中的输出
EditText editText = (EditText) findViewById(R.id.editText);
    editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    // TODO Auto-generated method stub
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
     // TODO Auto-generated method stub
    }
});

答案 2 :(得分:0)

这是我使用的代码,以防其他人

class DecimalFormatter(private val txt: EditText): TextWatcher {
        var ignoreChanges = false

        override fun afterTextChanged(s: Editable?) {
            if (!ignoreChanges) {
                ignoreChanges = true
                var content = txt.text.toString().replace(".", ",")
                var newContent = ""
                var commaFound = false
                for (c: Char in content) {
                    if ((c == ',' && !commaFound) || c != ',') {
                        newContent += c
                        if (c == ',') {
                            commaFound = true
                        }
                    }
                }
                txt.setText(newContent)
                if (newContent == "") {
                    newContent = "0,0"
                }

                txt.setSelection(txt.text.length)
                ignoreChanges = false
            }
        }

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {

        }

        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
        }

    }