2017-01-20 14 views
2

私は次の操作を行う場合には(バグ?):アンドロイド「アンドロイド:inputType」上書き「アンドロイド:数字を」あなたは後にそれを設定した場合、「アンドロイド:数字」

et_user_input.setKeyListener(DigitsKeyListener.getInstance("123-+")); 
et_user_input.setInputType((EditorInfo.TYPE_TEXT_VARIATION_NORMAL)); 

inputTypeの第二の設定数字を上書きしますI指定された。カスタムコンパウンドビューを使用しているため、スイッチのケースが属性に基づいてどのような順序でトリガーするかを制御することができないため、これはかなり頭痛です。

public ValidationEditText(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ValidationEditText); 
    int count = typedArray.getIndexCount(); 

    for (int i = 0; i < count; i++) { 
      int attr = typedArray.getIndex(i); 

      switch (attr) { 
       case R.styleable.ValidationEditText_android_inputType: 
        LogUtil.a(getClass(), "Here1"); 
        et_user_input.setInputType(typedArray.getInt(attr, EditorInfo.TYPE_TEXT_VARIATION_NORMAL)); 
        break; 

       case R.styleable.ValidationEditText_android_digits: 
        LogUtil.a(getClass(), "Here2"); 
        et_user_input.setKeyListener(DigitsKeyListener.getInstance(typedArray.getString(attr))); 
        break; 
      } 

     } 
} 

「Here2」常に最初にスイッチケースには「Here1」に続くトリガー:

は、ここに私のコードの小さなスニペットです。

この「オーバーライド」効果はAndroidの望ましい動作か、実際はバグですか?

答えて

0

見つかった解決策は、数字のinputTypeを返すDigitsKeyListenerがNumberKeyListenerを拡張することに問題がありました。ソリューションは

public class CustomDigitsKeyListener extends NumberKeyListener { 

private char[] mAccepted; 

public CustomDigitsKeyListener(char[] mAccepted) { 
    this.mAccepted = mAccepted; 
} 

public CustomDigitsKeyListener() { 
} 

public static CustomDigitsKeyListener getInstance(String accepted){ 
    CustomDigitsKeyListener cust = new CustomDigitsKeyListener(); 
    cust.mAccepted = new char[accepted.length()]; 
    accepted.getChars(0, accepted.length(), cust.mAccepted, 0); 
    return cust; 
} 

@Override 
protected char[] getAcceptedChars() { 
    return mAccepted; 
} 

@Override 
public int getInputType() { 
    return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; 
} 
} 
です
関連する問題