我们有Edittext,它可以取十进制值。所以我用过
android:inputType="numberDecimal"
android:numeric="decimal"
现在EditText采用十进制值。我的查询是否可以控制用户输入最多两位小数?
例如1345.99
,小数点后不能超过两位数。
答案 0 :(得分:3)
可以有两个解决方案,
1)让用户在输入类似xxx.xx之后不允许。
2)让他输入,当保存值或在屏幕上执行操作时,如果输入的值不是所需的格式,请检查edittext的值并生成吐司。
第二个解决方案,你去。 /
String str = editText.getText().toString();
int indexOFdec = str.indexOf(".");
if(indexOFdec >=0) {
if(str.substring(indexOFdec).length() >2)
{
Toast.makeText(getApplicationContext(), "Print a message here", Toast.LENGTH_SHORT).show();
return;
}
}
让我知道它是否有效。
答案 1 :(得分:1)
虽然我不确定您是否可以在XML中执行此操作,但一个好的解决方法是在调用getText.toString()之后创建EditText的子字符串并提取必要的标记。只需查找十进制字符“。”在String中并在其后提取2个索引。
答案 2 :(得分:1)
我在另一个网站上发现了这个,但是我不会让我链接,说这个内容不允许在答案中。
InputFilter
的这种实现解决了这个问题:
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.DigitsKeyListener;
public class MoneyValueFilter extends DigitsKeyListener {
public MoneyValueFilter() {
super(false, true);
}
private int digits = 2;
public void setDigits(int d) {
digits = d;
}
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
CharSequence out = super.filter(source, start, end, dest, dstart, dend);
// if changed, replace the source
if (out != null) {
source = out;
start = 0;
end = out.length();
}
int len = end - start;
// if deleting, source is empty
// and deleting can't break anything
if (len == 0) {
return source;
}
int dlen = dest.length();
// Find the position of the decimal .
for (int i = 0; i < dstart; i++) {
if (dest.charAt(i) == '.') {
// being here means, that a number has
// been inserted after the dot
// check if the amount of digits is right
return (dlen-(i+1) + len > digits) ?
"" :
new SpannableStringBuilder(source, start, end);
}
}
for (int i = start; i < end; ++i) {
if (source.charAt(i) == '.') {
// being here means, dot has been inserted
// check if the amount of digits is right
if ((dlen-dend) + (end-(i + 1)) > digits)
return "";
else
break; // return new SpannableStringBuilder(source, start, end);
}
}
// if the dot is after the inserted part,
// nothing can break
return new SpannableStringBuilder(source, start, end);
}
}
答案 3 :(得分:0)
使用TextWatcher
检查EditText包含的点数。如果点的数量多于EditText的一个编辑文本。
EditText et = new EditText(this);
et.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void afterTextChanged(Editable s) {
// Logic to check how many points does contain your EditText
}
});