EditText 始终显示 2 位小数的数字
我想始终以两位小数显示 EditText 字段的输入。因此,当用户输入 5 时,它将显示 5.00,或者当用户输入 7.5 时,它将显示 7.50。
除此之外,当字段为空而不是什么都没有时,我还想显示零。
我已经将输入类型设置为:
android:inputType="number|numberDecimal"/>
我应该在这里使用输入过滤器吗?
抱歉,我对 android / java 还是很陌生......
感谢您的帮助!
编辑 2011-07-09 23.35 - 解决了第 1 部分(共 2 部分):将“”改为 0.00。
有了nickfox的回答,我的问题就解决了一半。
et.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().matches(""))
{
et.setText("0.00");
Selection.setSelection(et.getText(), 0, 4);
}
}
});
我仍在为我的问题的另一半寻找解决方案。如果我找到解决方案,我也会将其发布在这里。
编辑 2011-07-09 23.35 - 解决了第 2 部分(共 2 部分):将用户输入更改为具有两位小数的数字。
OnFocusChangeListener FocusChanged = new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
String userInput = et.getText().toString();
int dotPos = -1;
for (int i = 0; i < userInput.length(); i++) {
char c = userInput.charAt(i);
if (c == '.') {
dotPos = i;
}
}
if (dotPos == -1){
et.setText(userInput + ".00");
} else {
if ( userInput.length() - dotPos == 1 ) {
et.setText(userInput + "00");
} else if ( userInput.length() - dotPos == 2 ) {
et.setText(userInput + "0");
}
}
}
}
I would like to display the input of the EditText fields with two decimals at all times. So when the user enters 5 it will show 5.00 or when the user enters 7.5 it will show 7.50.
Besides that I would like to also show zero when the field is empty instead of nothing.
What I've got already is the inputtype set to:
android:inputType="number|numberDecimal"/>
Should I work with inputfilters here?
Sorry I still quite new to android / java...
Thanks for your help!
Edit 2011-07-09 23.35 - Solved part 1 of 2: The "" to 0.00.
With the answer of nickfox I was able to solve half of my question.
et.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().matches(""))
{
et.setText("0.00");
Selection.setSelection(et.getText(), 0, 4);
}
}
});
I'm still working on a solution for the other half of my question. If I found the solution I will post it here too.
Edit 2011-07-09 23.35 - Solved part 2 of 2: Change user input to a number with two decimals.
OnFocusChangeListener FocusChanged = new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
String userInput = et.getText().toString();
int dotPos = -1;
for (int i = 0; i < userInput.length(); i++) {
char c = userInput.charAt(i);
if (c == '.') {
dotPos = i;
}
}
if (dotPos == -1){
et.setText(userInput + ".00");
} else {
if ( userInput.length() - dotPos == 1 ) {
et.setText(userInput + "00");
} else if ( userInput.length() - dotPos == 2 ) {
et.setText(userInput + "0");
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是我用来输入美元的东西。它确保始终只有小数点后 2 位。您应该能够通过删除 $ 符号来适应您的需要。
Here is something I use to for dollar input. It makes sure that there are only 2 places past the decimal point at all times. You should be able to adapt it to your needs by removing the $ sign.
更新 #2
如果我错了,请纠正我,但官方文档为 TextWatcher 表示它合法使用
afterTextChanged
方法更改...此任务的 EditText 内容。我在多语言应用程序中执行相同的任务,并且据我所知,可能有
、
或.
符号作为分隔符,因此我修改 nickfox 0.00 格式的答案,符号总数限制为 10:布局(已更新):
EditTextAlwaysLast类:
ocCreate 方法中的代码(更新#2):
这看起来对我来说是最好的结果。现在此代码支持复制粘贴操作
Update #2
Correct me if I'm wrong, but oficial docs to TextWatcher say that it's legitimate use
afterTextChanged
method for make changes to... EditText content for this task.I have the same task in my multy-language app and as I know it's possible
,
or.
symbols as separator so I modify nickfox answer for 0.00 format with total limit of symbols to 10:Layout (Updated):
EditTextAlwaysLast class:
Code in ocCreate method (Update #2):
It's look like the best result for me. Now this code support copy-paste actions
只是对帕特里克发布的解决方案进行了一些细微的更改。我已经在 onFocusChangedListener 中实现了所有内容。另请务必将 EditText 输入类型设置为“number|numberDecimal”。
变化是:
如果输入为空,则替换为“0.00”。
如果输入的精度超过两位小数,则向下转换为两位小数。
一些小的重构。
Just some minor changes to the solutions that patrick posted. I've implemented everything in the onFocusChangedListener. Also be sure to set the EditText input type to "number|numberDecimal".
Changes are:
If input is empty then replace with "0.00".
If input has more than two decimals of precision, then cast down to two decimals.
Some minor refactoring.