从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
而不是我的自定义numpad
。 n0
是归零按钮。基本上每当我按下零按钮时,我的应用程序就会崩溃。
我只需要零按钮在单击时不会返回任何值的代码,以避免前导零。下面是addTextChangedListener(new TextWatcher()
得到这些错误:
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 中删除触摸延迟
带有 RadioButton 单选的自定义 ListView