嘿伙计们我正在开发市场交易和东西的应用程序,并且客户希望在类型编号十进制的编辑文本上有条件。 他希望用户在点后面只输入数字5,如果数字是小数,并且只有点后一位数。 即 15 14 1949年 12.33(不接受) 12.5(已接受)
所以该怎么做请给我一些提示
答案 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);
}