金额输入控制代码

每个人的实现思路不一样,写起来费劲这里做个笔记。
addtextwatcher

 <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())

 var regStrs = [
		['^0(\\d+)$', '$1'], //禁止录入整数部分两位以上,但首位为0
		['[^\\d\\.]+$', ''], //禁止录入任何非数字和点
		['\\.(\\d?)\\.+', '.$1'], //禁止录入两个以上的点
		['^(\\d+\\.\\d{2}).+', '$1'] //禁止录入小数点后两位以上
	]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值