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

Posted

技术标签:

【中文标题】从android中的自定义零按钮中删除edittext中的前导零【英文标题】:Remove leading zero in edittext from a custom zero button in android 【发布时间】:2019-06-20 11:59:27 【问题描述】:

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

//自定义归零按钮 n0.setOnClickListener(new View.OnClickListener() @覆盖 公共无效 onClick(查看 v) input1.append("0"); 操作A(); );

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

input1.addTextChangedListener(new TextWatcher() @覆盖 public void beforeTextChanged(CharSequence s, int start, int count, int after) @覆盖 public void onTextChanged(CharSequence s, int start, int before, int count) @覆盖 public void afterTextChanged(Editable s) if (s.toString().length() == 1 && s.toString().startsWith("0")) s.clear(); );

得到这些错误:

androidRuntime:致命例外:主要 进程:上下文,PID:12408 java.lang.NumberFormatException:空字符串 在 java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071) 在 java.lang.Double.valueOf(Double.java:511) 在 context.operationA(MainActivity.java:478) 在上下文 $17.onClick(MainActivity.java:383) 在 android.view.View.performClick(View.java:5610) 在 android.view.View$PerformClick.run(View.java:22265) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

【问题讨论】:

【参考方案1】:

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

【讨论】:

它仍然崩溃 :( 这仍然适用于内置软数字键盘的 android,但不适用于我的自定义数字键盘 zeron 按钮。 使用错误日志更新线程。替换了地址“上下文”,所以它不会太长。 当您尝试将字符串解析为 double 但字符串为空时发生错误【参考方案2】:

我遇到了同样的问题。我通过在下面编写一个函数来解决它:

private String trimLeadingZeros(String string)

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

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

【讨论】:

【参考方案3】:

要删除 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);

【讨论】:

以上是关于从android中的自定义零按钮中删除edittext中的前导零的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UITableViewCell 中的自定义 UIButton 中删除触摸延迟

从 XML 布局中的自定义视图中删除包前缀

带有 RadioButton 单选的自定义 ListView

在android studio中删除一个带有按钮的listview项目

Android:从操作栏的自定义布局中删除左边距

如何设计WinForm中DataGridView控件的自定义按钮列