EditText十进制值

时间:2016-05-23 18:36:36

标签: java android android-edittext

我实施EditText并且我面临一个问题...我已经说过inputType是{{1}但是当我输入numberDecimal时,我想把#34;。"或"," autommatically ... 我可以举例说明EditText100.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); } 我猜...因为我必须把"。"手动,我想避免这种情况。

EDIT2

我的一位朋友也向我建议我可以忽略。并且,因为在editText上的标记总是100,80,32等...只需键入这些数字但是然后将它们作为双重处理,并且当用户完成编辑时我想要放置00 editText有可能吗?

当时的比较afterTextChanged是否很好检查某个编辑文本是不是空的?我必须更新TextView一旦两个edittext都不为空并做一些操作所以,我试过这种方式,还有另一个更好吗? (我把lenght()== 5因为在EditText上我把maxlenght()= 5;

1 个答案:

答案 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 |”如果是后者,你如何处理它们放入下一个值,你会用它来舍入前一个值吗?这是一个有趣的情况,但这会让你开始。