2011-09-09 6 views
0

android : numeric = "decimal"인 EditText 필드와 10 진수 입력을위한 android : inputType = "phone"필드가 있습니다. 사용자가 숫자를 입력하기가 더 쉽기 때문에 입력 유형 전화를 사용합니다.하드 키보드를 사용할 때 EditText 파일의 입력 번호가 잘못 입력되었습니다.

소프트 키보드가있는 장치의 경우 아무런 문제가 없지만 잘못된 번호 (예 : HTC Desire Z 사용시)를 인쇄 할 때 하드 키보드를 사용하기 시작할 때 문제가 없습니다.

이 문제를 해결하는 방법은 무엇입니까?

P. 나는 안드로이드 용 "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})?"; 
    } 
} 
관련 문제