Edittext - 如何只添加一个点?

问题描述 投票:1回答:4

这是我的编辑文字

        <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"
        />

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

java android xml android-edittext
4个回答
0
投票

这是你想要的?

Set EditText Digits Programmatically

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

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。


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+".";
            }
        }
    });

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
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.