Android 如何在edittext中强制小数点位于两位数之后?

Android 如何在edittext中强制小数点位于两位数之后?,android,android-edittext,Android,Android Edittext,如何在android中设置两个整数后的小数点,并将限制设置为仅55位?在搜索了很多之后,我在这里发布了我的问题。我有一个Edittext和一个android:inputType=“number”。我可以将EditText的最大限制设置为55位。我希望用户能够键入介于0到55之间的小数位数,如24.22或52.88 请告诉我如何才能做到这一点? 这是我的密码 public class FuelCostCalculator extends DialogFragment { EditText

如何在android中设置两个整数后的小数点,并将限制设置为仅55位?在搜索了很多之后,我在这里发布了我的问题。我有一个
Edittext
和一个
android:inputType=“number”
。我可以将
EditText
的最大限制设置为55位。我希望用户能够键入介于0到55之间的小数位数,如24.22或52.88

请告诉我如何才能做到这一点? 这是我的密码

public class FuelCostCalculator extends DialogFragment {

    EditText etLocation, etKilo, etLiter, etFuelCost;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NORMAL, R.style.fullscreen_dialog);
    }

    private void init(View view) {
       //this is my editText
       etLiter = view.findViewById(R.id.etLiter);
       InputFilterMinMax filter = new InputFilterMinMax("0", "5499") {};
       etLiter.setFilters(new InputFilter[]{filter});

    }
  }
我的过滤类是:

public class InputFilterMinMax implements InputFilter {

    private int min, max;

    public InputFilterMinMax(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public InputFilterMinMax(String min, String max) {
        this.min = Integer.parseInt(min);
        this.max = Integer.parseInt(max);
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        try {
            int input = Integer.parseInt(dest.toString() + source.toString());
            if (isInRange(min, max, input))
                return null;
        } catch (NumberFormatException nfe) { }
        return "";
    }

    private boolean isInRange(int a, int b, int c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
    }
}
公共类InputFilterMax实现InputFilter{
私有整数最小值,最大值;
公共InputFilterMinMax(最小整数,最大整数){
this.min=min;
this.max=max;
}
公共InputFilterMinMax(字符串最小值、字符串最大值){
this.min=整数.parseInt(min);
this.max=Integer.parseInt(max);
}
@凌驾
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int开始、int结束){
试一试{
int input=Integer.parseInt(dest.toString()+source.toString());
if(isInRange(最小、最大、输入))
返回null;
}catch(NumberFormatException nfe){}
返回“”;
}
私有布尔值isInRange(int a、int b、int c){

返回b>a?c>=a&&c=b&&c检查此答案。虽然答案不太干净,但它可以根据您的需要工作。假设actAddItemFromDropdownList是您的编辑文本,并且您已经在Xml中设置了最大位数限制

int max =0;
String text ="";
actAddItemFromDropdownList.addTextChangedListener(new TextWatcher() {
        @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) {

            if(actAddItemFromDropdownList.getText().length()>0){
                if(text.equals(actAddItemFromDropdownList.getText().toString())){
                    text = "";
                }else {
                    text = actAddItemFromDropdownList.getText().toString();
                    max = max + 1;
                    if (max == 2) {
                        text = text + ".";
                        max = 0;
                        actAddItemFromDropdownList.setText(text);
                        actAddItemFromDropdownList.setSelection(actAddItemFromDropdownList.getText().length());
                    }
                }
            }



        }
    });

试试看,如果有效,标记为选定答案。

您可以使用文本观察者编辑文本。文本观察者dit不能解决我的问题您想要实现什么?@Sharatikaka您读过我的问题吗?我想您想要应用句点(句点、句点)每两位之后。每两位用户按下一次,它们就应该绘图?谢谢,让我检查一下兄弟。如果我输入5位,它不起作用兄弟,它会自动在第4位之后放一个小数点。我所做的是理解你的问题,特别是我在评论中所说的。它会立即自动标记小数点y 2数字它也会在4位数后标记另一个小数。BDW感谢您的时间。希望您理解。