我尝试创建一个包含多个TextWatcher
和EditText
的小型转换器,例如:
m: enter value /m space
km: enter value //km space
当您引入一个值,例如2000米(在米空间中)时,您将在公里空间中看到2公里。这是我的代码:
etm.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) {
double m=0, cmetres;
DecimalFormat df = new DecimalFormat("#.#####");
if(etm.hasFocus()) {
String et1c = s.toString();
if ("R$0,00".equals(s.toString())){
longkm = 0;
etkm.setText("" + df.format(longkm));
} else {
if (et1c.equals("")) {
cmetres = 1;
} else {
m = Double.parseDouble(et1c);
cmetres = 0;
}
if ((cmetres == 0)) {
//CONVERSION CODE
etkm.setText("" + df.format(longkm));
}
}
}
}
});
etkm .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) {
double km = 0, ckm;
DecimalFormat df1 = new DecimalFormat("#.########");
if (etkm.hasFocus()) {
String et2c = s.toString();
if ("R$0.00".equals(s.toString())) {
longm=0;
etm.setText("" + df1.format(longm));
} else {
if (et2c.equals("")) {
ckm = 1;
} else {
km = Double.parseDouble(et2c);
ckm = 0;
}
if (ckm == 0) {
//conversion code
etm.setText("" + df1.format(longmk));
}
}
}
}
});
问题是这个代码在模拟器上完美运行但是当我删除一些小数时,应用程序在我的手机上崩溃,例如:1,11或0.0001等... 谢谢。
答案 0 :(得分:0)
我相信你得到的是java.lang.NumberFormatException: Invalid double: ","
,它不是数字格式的一部分,你也不能输入文字。
解决方案:
<EditText
......
android:inputType="numberDecimal"/>
允许您仅输入有效数字/字符,允许用于定义有效数字。
答案 1 :(得分:0)
Okey我用这段代码解决了它:
DecimalFormat df1 = new DecimalFormat("#.###");
DecimalFormatSymbols sym = DecimalFormatSymbols.getInstance();
sym.setDecimalSeparator('.');
df1.setDecimalFormatSymbols(sym);
谢谢大家!美好的一天!