2011-09-09 29 views
0

我有用於輸入十進制數字的android:numeric =「decimal」和android:inputType =「phone」的EditText字段。我使用輸入型手機,因爲用戶輸入數字更容易。使用硬鍵盤時EditText字段中的輸入錯誤號碼

對於任何帶有軟鍵盤的設備,我沒有任何問題,但是當我開始使用硬鍵盤時會打印錯誤的數字(例如,當我使用HTC Desire Z時)。

如何解決這個問題?

P.S.我爲Android開發了「Simple Loan Calculator」 - 它是開源和免費軟件

回答

0

解決!

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