如何从右到左键入小数值(金钱)?

时间:2013-06-18 10:53:58

标签: android android-edittext

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

就像输入产品的价格一样。我如何在Android上执行此操作?我很难说实话,因为我从未尝试过这样的事情。是否有一些特殊的输入法?

3 个答案:

答案 0 :(得分: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手持设备或计算器一样)。

由于您不需要构建带按钮的键盘,您是否可以尝试拦截键盘事件,这可以在Handling Keyboard Actions中描述,也可以这样写:

@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方法。

答案 1 :(得分:1)

使用:

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

在这里,您可以找到有关TextWatcher http://developer.android.com/reference/android/text/TextWatcher.html

的更多信息

答案 2 :(得分: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将更改该答案(一旦验证)。