如何在从右侧填充的EditText
上创建遮罩?
例如,初始值为0.0。然后,如果按下1则变为0.1,然后如果按下2则变为1.2,如果用户接下来按下3则达到12.3。
尝试使用库like this,但不允许从右向左填充。
答案 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) {
}
}