强制键盘输入某个数字

时间:2017-01-30 10:30:39

标签: android xml android-edittext

嘿伙计们我正在开发市场交易和东西的应用程序,并且客户希望在类型编号十进制的编辑文本上有条件。 他希望用户在点后面只输入数字5,如果数字是小数,并且只有点后一位数。 即 15 14 1949年 12.33(不接受) 12.5(已接受)

所以该怎么做请给我一些提示

3 个答案:

答案 0 :(得分:1)

试试这个并检查它是否有效。

final String regex = "^\\-?(\\d{0,5}|\\d{0,5}\\.[5]{0,1})$";
((EditText)rootView.findViewById(R.id.editText1)).setFilters(new InputFilter[] {
    new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned destination, int destinationStart, int destinationEnd) {
            if (end > start) {
                // adding: filter   
                // build the resulting text
                String destinationString = destination.toString();
                String resultingTxt = destinationString.substring(0, destinationStart) + source.subSequence(start, end) + destinationString.substring(destinationEnd);
                // return null to accept the input or empty to reject it
                return resultingTxt.matches(regex) ? null : "";
            }
            // removing: always accept
            return null;
        }
    }
});

此处检查用户输入以匹配正则表达式,如果匹配则返回输入字符串,否则返回null。

答案 1 :(得分:0)

试试这个addTextChangedListener。 每当用户输入一个点时,您需要将5附加到editText。 `flag = 0; _field.addTextChangedListener(new TextWatcher(){

        public void afterTextChanged(Editable s) {
        }

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

        public void onTextChanged(CharSequence s, int start,
                                  int before, int count) {
            if (s.toString().contains(".") && (flag == 0)) {
                flag = 1;
                _field.setText(_field.getText() + "5");

            } else if (s.toString().contains(".") && (flag == 1)) {

            } else {
                flag = 0;
            }
        }
    });`

答案 2 :(得分:0)

<Edittext
    android:id="@+id/testing"
    android:inputType="numberDecimal"
    android:digits="0123456789."
    >

</Edittext>

然后,使用InputFilter

testing.setFilters(new InputFilter[]{NumberFilter(), new InputFilter.LengthFilter(6)});
//OR
testing.setFilters(new InputFilter[]{NumberFilter()});

为NumberFilter implemenets InputFilter

创建类
public class NumberFilter implements InputFilter{
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            // ignore empty space and not number
            if (!isNullorEmpty(source.toString()) && !isOnlyNumber(source.toString()))
                return "";

            //ignore first .
            if (!source.toString().charAt(0).equals("."))
                return "";

            if ((source.toString().charAt(0) != '8' || source.toString().charAt(0) != '9'))
                return "";

            return null;
        }
    }



// to allow 1 and 1.2
public static boolean isOnlyNumber(String number) {
     return number.matches("(?<=^| )\d+(\.\d+)?(?=$| )");
}

//check empty space or Null
public static boolean isNullorEmpty(String string){
    return StringUtils.isEmpty(string);
}