【问题标题】:How can i customise an EditText Box to just allow currency?如何自定义 EditText 框以仅允许使用货币?
【发布时间】:2011-06-13 20:13:54
【问题描述】:

我是开发新手,我刚刚开始进入令人生畏的验证世界。到目前为止,我已经很容易了,并且能够仅通过以下两行来限制输入类型:android:inputType="phone" android:digits="1234567890."

现在我想尝试阻止我的用户输入小数点后两位的数字。我想我要么需要使用 InputFilter 或使用 onTextChange 来检查小数和数字的使用(唉,我也不知道我将如何去做)。我对这两种方法都没有经验,我很难在网上找到我能理解的例子,如果有人能告诉我从哪里开始,我将不胜感激,我认为我走在正确的轨道上,但是我什至不确定如何检查字符,更不用说限制它们了。欢迎大家解答,谢谢。

【问题讨论】:

    标签: java android validation input currency


    【解决方案1】:

    创建一个实现TextWatcher的类

    类 CurrencyFormatterTextWatcher 实现 TextWatcher { @覆盖 公共同步无效 afterTextChanged(可编辑文本){ // [...] 在这里进行格式化;请注意,每个 // 更改文本值将触发另一个 textchanged 事件 } }

    然后将其注册为目标 EditText 触发的 textchanged 事件的侦听器:

    currencyFormatter = new CurrencyFormatterTextWatcher(); currencyEditText.addTextChangedListener(currencyFormatter);

    【讨论】:

    • 非常感谢,但我仍在试图弄清楚格式会是什么样子。如果我在其中使用 .getText 它只会获取每个新字符还是整个字符串?可能是整个字符串在这种情况下我如何循环字符?然后当我发现小数点后有太多字符时,我该怎么做才能将多余的字符更改为“”而不影响整个盒子?另外也许可以使用 beforeTextChange 来防止它输入字符?不知道这是否是一个更好的方法,你给了我很多思考:)
    • 我建议您查看有关 NumberFormat 类和子类 (download.oracle.com/javase/1.4.2/docs/api/java/text/…) 的文档以了解您的格式化职责。关于 TextWatcher 接口,beforeTextChanged()onTextChanged() 提供了有关对 EditText 文本所做更改的更多信息,但正如文档所述,您必须 不对它做进一步的修改;您可以在实现类中重写这些方法来存储状态数据,然后在 afterTextChanged 方法中进行更改。
    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多