假设加载字段时,其为空。当用户键入1时,它表示0.01,然后在1(10)之后键入另一个0,它变为0.10。当他输入另一个1时,它变为1.10。
就像输入产品的价格一样。我如何在Android上执行此操作?我很难说实话,因为我从未尝试过这样的事情。是否有一些特殊的输入法?
答案 0 :(得分:2)
这是我为自己写的代码:
private String addCurrencySign(String digits) {
String string = "£";
// Amount length greater than 2 means we need to add a decimal point
if (digits.length() > 2) {
String pound = digits.substring(0, digits.length() - 2); // Pound part
String pence = digits.substring(digits.length() - 2); // Pence part
string += pound + "." + pence;
} else if (digits.length() == 1) {
string += "0.0" + digits;
Log.d(TAG, "length 1 " + string);
} else if (digits.length() == 2) {
string += "0." + digits;
Log.d(TAG, "length 2 " + string);
}
return string;
}
每次用户尝试在数字键盘上键入时,都会触发此addCurrencySign
方法。数字键盘由几个数字按钮组成(就像POS手持设备或计算器一样)。
由于您不需要构建带按钮的键盘,您是否可以尝试拦截键盘事件,这可以在Handling Keyboard Actions中描述,也可以这样写:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_0:
return true;
case KeyEvent.KEYCODE_1:
return true;
case KeyEvent.KEYCODE_2:
return true;
case KeyEvent.KEYCODE_3:
return true;
......
default:
return super.onKeyUp(keyCode, event);
}
}
也许你不必使用switch子句,我的想法是拦截输入0~9位数的密钥,并且对于每个0~9,调用addCurrencySign
方法。
答案 1 :(得分:1)
使用:
TextWatcher watcher = new TextWatcher(){
afterTextChanged(Editable s){}
beforeTextChanged(CharSequence s, int start, int count, int after){}
onTextChanged(CharSequence s, int start, int before, int count){}
}
yourEditText.addTextChangedListener(watcher);
在这里,您可以找到有关TextWatcher http://developer.android.com/reference/android/text/TextWatcher.html
的更多信息答案 2 :(得分:1)
好的伙计们......我有一个临时的解决方法。这不能被称为完美的解决方案,但它的解决方案在我的情况下运作良好。
我无法找到一种方法来阻止stackoverflow错误。我的解决方法?使EditText字段获取输入,但将货币输出显示在TextView上,并使EditText从UI中消失,这样用户就无法看到他只输入1234而不是12.34。
这是代码。 addCurrencySign函数来自@ ss1271。
amountpaid.addTextChangedListener(new TextWatcher()
{
@Override public void onTextChanged(CharSequence s, int start, int before, int count)
{
amount.setText(addCurrencySign(s.toString()));
}
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override public void afterTextChanged(Editable s)
{
}
});
这是用户发布的功能。它运作得很好。
private String addCurrencySign(String digits)
{
String string = "&"; // Your currency
// Amount length greater than 2 means we need to add a decimal point
if (digits.length() > 2)
{
String pound = digits.substring(0, digits.length() - 2); // Pound
// part
String pence = digits.substring(digits.length() - 2); // Pence part
string += pound + "." + pence;
}
else if (digits.length() == 1)
{
string += "0.0" + digits;
Log.d("TextWatcher", "length 1 " + string);
}
else if (digits.length() == 2)
{
string += "0." + digits;
Log.d("TextWatcher", "length 2 " + string);
}
return string;
}
这是'隐形'编辑文字:
<EditText
android:id="@+id/amoundpaid"
android:layout_width="1dp"
android:layout_height="1dp"
android:background="#00000000"
android:ems="10"
android:inputType="number"
android:textColor="#00ffffff" >
<requestFocus />
这是显示输出文本的字段(带有货币符号和正确的小数点值):
<TextView
android:id="@+id/amount"
android:layout_width="210dp"
android:layout_height="50dp"
android:background="#80000000"
android:gravity="center|center_vertical"
android:textColor="#ffffff"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium" />
我知道这不是最佳解决方案,但它有效。我需要功能,这是我必须要做的事情。如果有人可以修复stackoverflow错误,请发布,mods将更改该答案(一旦验证)。