有人可以帮帮我吗?我如何强制用户以XX.XX格式(Eg.56.75)输入numberDecimal
字段中的EditText
。
我使用max length属性将最大长度限制为5。
答案 0 :(得分:2)
你可以采用最简单的方式
<EditText
//.....
android:inputType="numberDecimal" /> // set inputformat
如果您需要确保InputFilter
之前和之后有2个数字,则可以使用.
。
在onCreate
下试试youreditText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter()});
这只是这个
的一个类修改强> 不得不重写模式,因为似乎匹配器匹配从第一个字符开始的输入并检查每个字符,因此您需要在模式中添加许多可选部分,以便它传递正在进行的每个检查。现在它不像你的情况那样允许222
public class DecimalDigitsInputFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (end > start) {
String destTxt = dest.toString();
String resultingTxt = destTxt.substring(0, dstart) + source.subSequence(start, end) + destTxt.substring(dend);
if (!resultingTxt.matches("^\\d(\\d(\\.\\d{0,2})?)?")) {
return "";
}
}
return null;
}
}
答案 1 :(得分:1)
你可以尝试
TextWatcher t1;
EditText e;
t1=new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.length()==3 && !s.toString().contains("."))
{
e.removeTextChangedListener(t1);
e.setText(s.subSequence(0,1)+"."+s.charAt(2));
e.addTextChangedListener(t1);
}
}
@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
}
};
e.addTextChangedListener(t1);
答案 2 :(得分:0)
试试这个:
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
DecimalFormat formatter = new DecimalFormat("##.##");
String yourFormattedString = formatter.format(s.toString());
edittext.setText(yourFormattedString);
}
});
答案 3 :(得分:0)
试试这个
exitText.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) {
if(charSequence.length() == 2){
exitText.setText("");
exitText.setText(charSequence+".");
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
答案 4 :(得分:0)
如果您想使用十进制数字格式,可以在XML中使用它:
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="numberDecimal" />
要限制位数,您可能需要使用其他答案中提及的InputFilter
或此处:Limit Decimal Places in Android EditText
答案 5 :(得分:0)
以下代码也有效:
在OnCreateView中:
myEditText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(2,2)});
Java类:
public class DecimalDigitsInputFilter implements InputFilter {
final int maxDigitsBeforeDecimalPoint ;
final int maxDigitsAfterDecimalPoint ;
public DecimalDigitsInputFilter(int digitsBeforeDecimal,int digitsAfterDecimal ){
maxDigitsBeforeDecimalPoint = digitsBeforeDecimal;
maxDigitsAfterDecimalPoint = digitsAfterDecimal;
}
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
StringBuilder builder = new StringBuilder(dest);
builder.replace(dstart, dend, source
.subSequence(start, end).toString());
if (!builder.toString().matches(
"(([1-9]{1})([0-9]{0," + (maxDigitsBeforeDecimalPoint - 1) + "})?)?(\\.[0-9]{0," + maxDigitsAfterDecimalPoint + "})?"
)) {
if (source.length() == 0)
return dest.subSequence(dstart, dend);
return "";
}
return null;
}
}