Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用硬键盘时EditText字段中输入的数字错误_Android_Android Edittext - Fatal编程技术网

Android 使用硬键盘时EditText字段中输入的数字错误

Android 使用硬键盘时EditText字段中输入的数字错误,android,android-edittext,Android,Android Edittext,我用android:numeric=decimal和android:inputType=phone编辑文本字段来输入十进制数字。我使用输入型电话,因为它更容易用户输入号码 对于任何带有软键盘的设备,我都没有任何问题,但当我开始使用硬键盘时,什么时候会打印错误的数字,例如当我使用HTC Desire Z时 如何解决这个问题 顺便说一句,我为Android开发了一款开源和免费软件解决了 AndroidManifest.xml PriceInputFilter.java <activity an

我用android:numeric=decimal和android:inputType=phone编辑文本字段来输入十进制数字。我使用输入型电话,因为它更容易用户输入号码

对于任何带有软键盘的设备,我都没有任何问题,但当我开始使用硬键盘时,什么时候会打印错误的数字,例如当我使用HTC Desire Z时

如何解决这个问题

顺便说一句,我为Android开发了一款开源和免费软件

解决了

AndroidManifest.xml

PriceInputFilter.java

<activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|keyboard" >
public void onCreate(Bundle savedInstanceState) {
    ....
    setPriceInputFilter(amountEdit, interestEdit, fixedPaymentEdit, periodYearEdit, periodMonthEdit, downPaymentEdit, disposableCommissionEdit, monthlyCommissionEdit);
    ....
}
private void setPriceInputFilter(EditText ... fields){
  PriceInputFilter filter = new PriceInputFilter();
  for (EditText field: fields){
    field.setFilters(new InputFilter[]{filter});
  }
}
public void onConfigurationChanged(Configuration newConfig) {
    if(newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO){
       setInputType(InputType.TYPE_NULL, amountEdit, interestEdit, fixedPaymentEdit, periodYearEdit, 
                                         periodMonthEdit, downPaymentEdit, disposableCommissionEdit, monthlyCommissionEdit);
       Toast.makeText(this, "HARD-keyboard", Toast.LENGTH_SHORT).show();
    }else{
      setInputType(InputType.TYPE_CLASS_PHONE, amountEdit, interestEdit, fixedPaymentEdit, periodYearEdit, 
                                               periodMonthEdit, downPaymentEdit, disposableCommissionEdit, monthlyCommissionEdit);
      Toast.makeText(this, "SOFT-keyboard", Toast.LENGTH_SHORT).show();
    }
    super.onConfigurationChanged(newConfig);
}
private void setInputType(int type , EditText ... fields){
    for (EditText field: fields){
      field.setInputType(type);
    }
}
public class PriceInputFilter implements InputFilter {
  public CharSequence filter(CharSequence source, int start, int end,  Spanned dest, int dstart, int dend) {
    String checkedText = dest.toString() + source.toString();
    String pattern = getPattern();
    if (!Pattern.matches(pattern, checkedText)) {
      return "";
    }
    return null;
  }
  private String getPattern() {
    return "[0-9]+([.]{1}||[.]{1}[0-9]{1,2})?";
  }
}