2

假设当一个字段被加载时,它是空的。当用户键入 1 时,它显示 0.01,然后他在 1 (10) 之后键入另一个 0,它变为 0.10。当他输入另一个 1 时,它变成了 1.10。

就像输入产品的价格一样。我如何在 Android 上做到这一点?老实说,我很难过,因为我从来没有尝试过这样的事情。有什么特殊的输入法吗?

4

3 回答 3

2

这是我为自己编写的代码:

private String addCurrencySign(String digits) {
        String string = "£";
        // Amount length greater than 2 means we need to add a decimal point
        if (digits.length() > 2) {
            String pound = digits.substring(0, digits.length() - 2); // Pound part
            String pence = digits.substring(digits.length() - 2); // Pence part
            string += pound + "." + pence;
        } else if (digits.length() == 1) {
            string += "0.0" + digits;
            Log.d(TAG, "length 1 " + string);
        } else if (digits.length() == 2) {
            string += "0." + digits;
            Log.d(TAG, "length 2 " + string);
        }

        return string;
    }

addCurrencySign每次用户尝试在数字键盘上键入时都会触发此方法。数字键盘由几个数字按钮组成(就像 POS 手持机或计算器一样)。

由于您不需要使用按钮构建小键盘,您是否可以尝试拦截键盘事件,这在处理键盘操作中进行了描述,并且可能编写如下内容:

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_0:

            return true;
        case KeyEvent.KEYCODE_1:

            return true;
        case KeyEvent.KEYCODE_2:

            return true;
        case KeyEvent.KEYCODE_3:

            return true;
        ......

        default:
            return super.onKeyUp(keyCode, event);
    }
}

也许你不必使用 switch 子句,我的想法是拦截输入 0~9 位的密钥,并为每个 0~9 调用addCurrencySign方法。

于 2013-06-18T10:59:38.327 回答
1

Use:

TextWatcher watcher = new TextWatcher(){
  afterTextChanged(Editable s){}
  beforeTextChanged(CharSequence s, int start, int count, int after){}
  onTextChanged(CharSequence s, int start, int before, int count){}
}
yourEditText.addTextChangedListener(watcher);

Here you will find more info about TextWatcher http://developer.android.com/reference/android/text/TextWatcher.html

于 2013-06-18T11:09:55.963 回答
1

好的,伙计们..我有一个临时的解决方法。这不能被称为完美的解决方案,但它是一种在我的情况下效果很好的解决方法。

我想不出办法来阻止 stackoverflow 错误。我的解决方法?让 EditText 字段接受输入,但在 TextView 上显示货币输出,并使 EditText 从 UI 中消失,这样用户就看不到他只输入了 1234 而不是 12.34。

这是代码。addCurrencySign 函数来自@ss1271。

amountpaid.addTextChangedListener(new TextWatcher()
        {

            @Override public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                amount.setText(addCurrencySign(s.toString()));
            }

            @Override public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {

            }

            @Override public void afterTextChanged(Editable s)
            {

            }
        });

这是用户发布的功能。它工作得很好。

private String addCurrencySign(String digits)
    {
        String string = "&"; // Your currency
        // Amount length greater than 2 means we need to add a decimal point
        if (digits.length() > 2)
        {
            String pound = digits.substring(0, digits.length() - 2); // Pound
                                                                        // part
            String pence = digits.substring(digits.length() - 2); // Pence part
            string += pound + "." + pence;
        }
        else if (digits.length() == 1)
        {
            string += "0.0" + digits;
            Log.d("TextWatcher", "length 1 " + string);
        }
        else if (digits.length() == 2)
        {
            string += "0." + digits;
            Log.d("TextWatcher", "length 2 " + string);
        }

        return string;
    }

这是“不可见”的编辑文本:

<EditText
        android:id="@+id/amoundpaid"
        android:layout_width="1dp"
        android:layout_height="1dp"
        android:background="#00000000"
        android:ems="10"
        android:inputType="number"
        android:textColor="#00ffffff" >

        <requestFocus />

这是将显示输出文本的字段(带有货币符号和正确的小数点值):

<TextView
        android:id="@+id/amount"
        android:layout_width="210dp"
        android:layout_height="50dp"
        android:background="#80000000"
        android:gravity="center|center_vertical"
        android:textColor="#ffffff"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium" />

我知道这不是一个最佳解决方案,但它确实有效。我需要这个功能,这是我必须做的。如果有人可以修复 stackoverflow 错误,请发布,mods 将更改答案(一旦验证)。

于 2013-06-19T07:40:44.443 回答