2015-05-18 3 views
0

У меня есть EditText, принимает символы, кроме пробелов, я использую InputFilter для фильтрации входных символов, а InputFilter ограничить длину ввода, но InputFilter s не все работы.Android EditText InputFilter не работает

Мой полный код является то, как показано ниже: initBodyView() является входом деятельности

public class MainActivity extends CustomedActivity{ 


InputFilter mcFilter = new InputFilter() { 

    @Override 
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
     for (int i = start; i < end; i++) { 
      if (Character.isSpaceChar(source.charAt(i))) { 
       // do something 
       return ""; 
      } 
     } 
     return null; 
    } 
}; 


private TextWatcher mcTextWatcher = new TextWatcher() { 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // TODO Auto-generated method stub 
     if (mVinLimit <= INPUT_LOWER_LIMIT) { 
      mcFlag = true; 
     } 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 
     if (mVinLimit > INPUT_LOWER_LIMIT && mVinLimit < INPUT_UPPER_LIMIT) { 
      if (s.length() == mVinLimit) { 
       mcFlag = true; 
      } else { 
       mcFlag = false; 
      } 
     } else if (INPUT_UPPER_LIMIT == mVinLimit) { 
      if (s.length() > 0) { 
       mcFlag = true; 
      } else { 
       mcFlag = false; 
      } 
     } 

    } 
}; 



// the entrance of the activity 
@Override 
protected void initBodyView() { 
    mBodyView = inflate(R.layout.layout); 
    mc = (EditText)mBodyView.findViewById(R.id.mc); 
    mc.addTextChangedListener(mcTextWatcher); 
    mc.setFilters(new InputFilter[] { 
      new InputFilter.LengthFilter(INPUT_LIMIT), mcFilter 
    }); 
} 

}

второй InputFilter не работает

атрибуты EditText как следует:

<EditText 
android:id="@+id/carriage_number" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_centerVertical="true" 
android:inputType="textUri" 
android:singleLine="true" > 
</EditText> 
+0

Что такое проблема с ур? –

+0

Неверный фильтр фильтра mCarriageNumberFilter. – twlkyao

+0

Как проходит ваша программа? Является ли ваша точка останова, если (Character.isSpaceChar (source.charAt (i))) –

ответ

2

TextWatcher получает и обрабатывает изменения в EditText вместо InputFilter. Комментировать строку ниже, и ваш код будет в порядке.

//mc.addTextChangedListener(mcTextWatcher); 
+0

Нет, «TextWatcher» должен был установить флаг кнопки, «InputFilter» не смог сделать трюк. – twlkyao

+0

Он работает на моей стороне без TextWatcher –

+0

Да, я решил проблему, «InputFilter» был где-то сброшен, спасибо за вашу помощь. – twlkyao

2

Попробуйте это в XML,

<EditText 
android:id="@+id/carriage_number" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:digits="qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM" 
android:layout_centerVertical="true" 
android:inputType="textUri" 
android:singleLine="true" > 
</EditText> 

введите символы, чтобы в EditText в,

android:digits="qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM" 
+0

Это прямое блокирование ввода пользователей без обратной связи, оно не соответствует требованию продукта. – twlkyao

+0

Вы вводите любые цифры ... ?? – Nils

0

Я нашел, где проблема, были someother код сброса в InputFilter s EditText, так как проект - это командный проект, я его не нашел, извините. Спасибо за вашу помощь.