我实施EditText
并且我面临一个问题...我已经说过inputType
是{{1}但是当我输入numberDecimal
时,我想把#34;。"或"," autommatically ...
我可以举例说明EditText
或100.00
取决于用户......可以吗?
我尝试创建90.00
并在TextWatcher
上执行某些操作,例如onTextChanged
是否添加"。"或","但是没有工作......
即使我有charSequence-lenght()==2
或##.##
之类的小数格式,我还能检测到逗号或点的放置时间吗?正如我所说,它可以是###.##
或100.00
。
80.00
问题在于textInput而不是 @Override
public void afterTextChanged(Editable editable) {
//et1 and et2 are not empty
if(et1.getText().toString().length() == 5 && et2.getText().toString().length() == 5){
double pe1 , pe2;
pe1 = Double.parseDouble(et1.getText().toString());
pe2 = Double.parseDouble(et2.getText().toString());
double res = (pe1+pe2)/2;
String formattedString = String.format("%,.2f", res);
tvPr.setText(formattedString);
}
我猜...因为我必须把"。"手动,我想避免这种情况。
我的一位朋友也向我建议我可以忽略。并且,因为在editText上的标记总是100,80,32等...只需键入这些数字但是然后将它们作为双重处理,并且当用户完成编辑时我想要放置00 editText有可能吗?
当时的比较afterTextChanged
是否很好检查某个编辑文本是不是空的?我必须更新TextView一旦两个edittext都不为空并做一些操作所以,我试过这种方式,还有另一个更好吗? (我把lenght()== 5因为在EditText上我把maxlenght()= 5;
答案 0 :(得分:1)
你所要做的就是这样的事情
final DecialFormat df = new DecimalFormat("#.00");
input.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) {
String value = s.toString();
if(TextUtils.isEmpty(value)){
// do what you want if it is empty
return;
}
try {
DecimalFormat df = new DecimalFormat("#.00");
String testFormat = df.format(Double.parseDouble(s.toString()));
// Manage the cursor position
int newPos;
try {
int pos = et.getSelectionStart();
int sizeDiff = testFormat.length() - s.length();
newPos = pos + sizeDiff;
}catch(Exception e1){
e1.printStackTrace();
newPos = testFormat.length();
}
// Modify the edit text to hold the double value
et.removeTextChangedListener(this);
et.setText(testFormat);
et.setSelection(newPos);
et.addTextChangedListener(this);
}catch(Exception e){
e.printStackTrace();
et.removeTextChangedListener(this);
et.setText("");
et.addTextChangedListener(this);
}
}
}
修改上面的代码以执行您需要的操作,但这是确保值为十进制形式的基本思想。值得一提的是,当你修改这样的文本时,光标位置总是一个“有趣”的东西,试图得到你想要的方式。如果您有“100.00”并且有人将光标放在“100.0 | 0”之类的地方并按下5,会发生什么情况。结果应为“100.0 | 5”或“100.05 |”如果是后者,你如何处理它们放入下一个值,你会用它来舍入前一个值吗?这是一个有趣的情况,但这会让你开始。