金额输入控制代码
每个人的实现思路不一样,写起来费劲这里做个笔记。
<EditText
android:inputType="number"
android:singleLine="true"
android:digits="0123456789."
android:id="@+id/moneyEd"
android:background="@null"
android:layout_toLeftOf="@+id/del_money"
android:layout_toRightOf="@+id/num_key"
android:layout_marginLeft="@dimen/dimen_20dp"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:textColor="@color/color_333333"
android:textSize="@dimen/font_size_36"
android:layout_height="wrap_content"/>
moneyEd.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(tv: Editable?) {
var toString = tv.toString()
if (toString.isNotEmpty()) {
moneyEd.removeTextChangedListener(this)
val split = toString.split(".")
val size = split.size
if ("." == toString) toString = "0."
var substring = when (size) {
1 -> toString
2 -> if (split[1].length > 2) toString.substring(0,toString.indexOf(".")+3) else toString
3 -> toString.substring(0, toString.lastIndexOf("."))
else -> toString.substring(0, toString.indexOf("."))
}
if (substring.toDouble() > comeMoney.toDouble()) substring = comeMoney
moneyEd.setText(substring)
moneyEd.setSelection(substring.length)
moneyEd.addTextChangedListener(this)
}
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
})
当然用下面这个正则实现更简单
"".matches("(^[1-9]([0-9]+)?(\\.[0-9]{1,2})?\$)|(^(0){1}\$)|(^[0-9]\\.[0-9]([0-9])?\$)".toRegex())