从android中的自定义零按钮中删除edittext中的前导零

时间:2019-01-27 06:56:19

标签: android android-edittext zero leading-zero

我已经使用addTextChangedListener(new TextWatcher()删除了前导零,但是它仅适用于Android软键盘numpad而非我的自定义numpadn0是归零按钮。基本上,每当我按下零按钮时,我的应用就会崩溃。


    //custom zero button
            n0.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        input1.append("0");
                        operationA();
                }
            });    

我只需要零按钮在单击时不会返回任何值的代码即可避免前导零。以下是addTextChangedListener(new TextWatcher()


    input1.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s.toString().length() == 1 && s.toString().startsWith("0")) {
                    s.clear();
                }
            }
        });

得到这些错误:


    AndroidRuntime: FATAL EXCEPTION: main
        Process: context, PID: 12408
        java.lang.NumberFormatException: empty String
            at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071)
            at java.lang.Double.valueOf(Double.java:511)
            at context.operationA(MainActivity.java:478)
            at context$17.onClick(MainActivity.java:383)
            at android.view.View.performClick(View.java:5610)
            at android.view.View$PerformClick.run(View.java:22265)
            at android.os.Handler.handleCallback(Handler.java:751)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6077)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

3 个答案:

答案 0 :(得分:1)

当您尝试在double方法中将字符串解析为operationA时发生错误,但字符串为空,在转换之前检查字符串是否为空

答案 1 :(得分:0)

我有同样的问题。我通过编写下面的函数来解决它:

private String trimLeadingZeros(String string)
{
    boolean startsWithZero = true;
    while (startsWithZero)
    {
        if(string.startsWith("0") && !string.substring(1,2).equalsIgnoreCase("."))
        {string = string.substring(1, string.length());}
        else
        {startsWithZero = false;}
    }
    return  string;
}

此函数还可以防止从00000.123之类的字符串中修剪所有零(它将返回0.123而不是无用的.123)。

答案 2 :(得分:0)

要删除EditText中的前导零,您可以使用TextWatcher来检测第一个键入的零并清除它

TextWatcher watcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (s.toString().equals("0")) {
            editText.removeTextChangedListener(this);
            editText.setText("");
            editText.addTextChangedListener(this);
        }

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
};

editText.addTextChangedListener(watcher);