Edittext - 如何只添加一个点?

时间:2017-12-25 14:40:00

标签: java android xml android-edittext

这是我的编辑文字

        <EditText
        android:id="@+id/etWaardeVan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:digits="0123456789."
        android:inputType="number|numberDecimal"
        android:scrollHorizontally="true"
        android:singleLine="true"
        />

如何以编程方式仅允许输入一个点。

6 个答案:

答案 0 :(得分:0)

这是你在找什么?

Set EditText Digits Programmatically

etWarDevan.setKeyListener(DigitsKeyListener.getInstance("0123456789."));

答案 1 :(得分:0)

我删除最后输入的字符,如果它是一个点,之前有一个。

EditText field = view.findViewById(R.id.etWaardeVan);
field.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable editable) {
                String str = editable.toString();
                String strold = str.substring(0, str.length() - 2);
                String lastchar = str.substring(str.length() - 1);
                if(strold.contains(".") && lastchar.equals(".")) field.setText(str);
            }
        });

提示:这仅在用户不跳回并在字符串中间输入点时才有效。您可能想要禁用光标移动。 (例如this或使用android:cursorVisible


或者(如果输入始终包含点),您可以创建两个不带点的EditTexts。

答案 2 :(得分:0)

这是我的解决方案,它有效:

dot.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //only show one dot if user put more than one dot
            if(input.contains(".")){
             //then save what it has
                input = textView.getText().toString();
            }else {
            //concat the input value
                input=input+".";
            }
        }
    });

答案 3 :(得分:0)

EditText 基本上是从 TextView 派生而来的,

void addTextChangedListener(TextWatcher watcher)

方法。 TextWatcher 具有回调,例如

abstract void afterTextChanged(Editable s)

您可以实施以过滤新文本以仅包含句点。

正则表达式:(?<=^| )\d+(\.\d+)?(?=$| )

示例

 et1.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            // TODO Auto-generated method stub
            // Do something here with regex pattern
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            // TODO Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable s) {

            // TODO Auto-generated method stub
        }
    });

答案 4 :(得分:0)

将 EditText/TextInputEditText 中的 inputType 属性设置为 android:inputType="numberDecimal"

答案 5 :(得分:0)

替换: android:inputType="number|numberDecimal"

与: android:inputType="number"