我正在尝试将editText的输入转换为百分比,而用户在真实设备上输入它,以下代码无法正常工作。它在模拟器上格式正确。
public class PercentTextWatcher implements TextWatcher {
private final EditText percentage;
private final Locale locale;
public PercentTextWatcher(EditText percentage, Locale locale) {
this.percentage = percentage;
this.locale = locale;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
percentage.removeTextChangedListener(this);
if (percentage == null) return;
percentage.removeTextChangedListener(this);
NumberFormat format = NumberFormat.getPercentInstance(locale);
format.setMaximumFractionDigits(4);
String percentNumber = format.format(convertToDouble(percentage.getText().toString())/1000);
percentage.setText(percentNumber);
percentage.setSelection(percentNumber.length()-1);
percentage.addTextChangedListener(this);
}
private double convertToDouble(String value) {
double convertedNumber = 0;
NumberFormat nf = new DecimalFormat("##,##");
try {
convertedNumber = nf.parse(value).doubleValue();
} catch (ParseException e) {
e.printStackTrace();
}
return convertedNumber;
}
键盘在第一个字符后不再接受输入,例如返回0,001%。
答案 0 :(得分:1)
问题的根源是您尝试访问一些不存在的索引,这就是IndexOutOfBoundsException
的原因。我相信可能有2个地方
1。您正在使用
percentage.setSelection(formatted.length());
并且索引以0
开头。所以,请尝试
percentage.setSelection(formatted.length()-1);
2。您可能需要将文字设置为textview
,其长度超过textview
希望这能帮到你!