从 android 中的自定义零按钮中删除编辑文本中的前导零
Remove leading zero in edittext from a custom zero button in android
我已经使用 addTextChangedListener(new TextWatcher()
删除前导零,但它只适用于 android 软键盘 numpad
而不是我的自定义 numpad
。 n0
是归零按钮。基本上每当我按下归零按钮时,我的应用程序就会崩溃。
//自定义归零按钮
n0.setOnClickListener(新View.OnClickListener() {
@覆盖
public void onClick(View v) {
input1.append("0");
操作A();
}
});
我只需要这样的代码,即零按钮在单击时不会 return 任何值以避免前导零。下面是 addTextChangedListener(new TextWatcher()
input1.addTextChangedListener(新的 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) {
如果 (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)
当您尝试在 operationA
方法中将字符串解析为 double
但字符串为空时发生错误,请在转换前检查字符串是否为空
我遇到了同样的问题。我通过在下面编写一个函数来解决它:
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 等字符串中删除所有零(它将 return 0.123 而不是无用的 .123)。
要删除 EditText 中的前导零,您可以使用 TextWatcher
检测第一个 typed-in 零并将其清除
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);
我已经使用 addTextChangedListener(new TextWatcher()
删除前导零,但它只适用于 android 软键盘 numpad
而不是我的自定义 numpad
。 n0
是归零按钮。基本上每当我按下归零按钮时,我的应用程序就会崩溃。
//自定义归零按钮 n0.setOnClickListener(新View.OnClickListener() { @覆盖 public void onClick(View v) { input1.append("0"); 操作A(); } });
我只需要这样的代码,即零按钮在单击时不会 return 任何值以避免前导零。下面是 addTextChangedListener(new TextWatcher()
input1.addTextChangedListener(新的 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) { 如果 (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)
当您尝试在 operationA
方法中将字符串解析为 double
但字符串为空时发生错误,请在转换前检查字符串是否为空
我遇到了同样的问题。我通过在下面编写一个函数来解决它:
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 等字符串中删除所有零(它将 return 0.123 而不是无用的 .123)。
要删除 EditText 中的前导零,您可以使用 TextWatcher
检测第一个 typed-in 零并将其清除
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);