Неправильные вводимые номера в поле EditText при использовании жесткой клавиатуры - PullRequest
0 голосов
/ 09 сентября 2011

У меня есть поле EditText с android: numeric = "decimal" и android: inputType = "phone" для ввода десятичных чисел. Я использую телефон типа ввода, потому что пользователю проще вводить номера.

Для любого устройства с программной клавиатурой у меня нет проблем, но когда я начинаю использовать жесткую клавиатуру, когда будут печатать неправильные номера (например, когда я использую HTC Desire Z).

Как решить эту проблему?

P.S. Я разработал « Простой кредитный калькулятор » для Android - он с открытым исходным кодом и бесплатное

1 Ответ

0 голосов
/ 14 сентября 2011

Решено!

AndroidManifest.xml

<activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|keyboard" >

MainActivity.java

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);
    }
}

PriceInputFilter.java

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})?";
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...