2015-09-25 3 views
1

Это должно быть легко игнорировать событие нажатия при нажатии другой клавиши от 0, 1 или 2, но этот код не работает для меня:Игнорировать нажатие клавиши на Android

txtInput.setOnKeyListener(new EditText.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode==KeyEvent.KEYCODE_0 || 
        keyCode==KeyEvent.KEYCODE_1 || 
        keyCode==KeyEvent.KEYCODE_2) { 
       return false; 
      }else { 
       return true; 
      } 
     } 
    }); 

Возвращения правды должна быть способ сделать это ... Что случилось?

+0

Почему не просто 'return! (KeyCode == KeyEvent.KEYCODE_0 || keyCode == KeyEvent.KEYCODE_1 || keyCode == KeyEvent.KEYCODE_2)'? Вся ваша конструкция if-else - это просто запутанный способ сказать «нет». –

+0

, если вы хотите ограничить некоторые символы, вы можете сделать это на textchangelistner aftertextchange event – Pavan

+0

@ Jean-FrançoisCorbett Я написал это, но, возможно, он хочет что-то добавить в ответ на возвращение, поэтому я положил его так же, как и он ... и это работает меня. –

ответ

3

Попробуйте это, я понял это, так как вы делаете onKeyListener возврат по умолчанию является false, так что если это false и он показывает число, а затем изменить его true и не будет;)

etpew.setOnKeyListener(new EditText.OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode==KeyEvent.KEYCODE_0 || 
        keyCode==KeyEvent.KEYCODE_1 || 
        keyCode==KeyEvent.KEYCODE_2) { 
       Toast.makeText(MainActivity.this, "NO!", Toast.LENGTH_SHORT).show(); 
       return true; 
      }else { 
       return false; 
      } 
     } 

    }); 

Как View.OnKeyListener Documentation says,

Возвращает Правда, если слушатель потребил событие, ложь в противном случае.

Кроме того, вы можете сделать это, добавив это в EditText

<EditText android:inputType="text" android:digits="3,4,5,6,7,8,9,*,qwertzuiopasdfghjklyxcvbnm" /> 

Также вы можете попробовать этот метод, но это лучше первый один ... вы можете использовать InputFilter следующим образом:

etpew.setFilters(new InputFilter[]{ 
      new InputFilter() { 
       public CharSequence filter(CharSequence src, int start, 
              int end, Spanned dst, int dstart, int dend) { 

        if (src.toString().matches("[a-zA-Z3-9 ]*")) //I've removed the 0,1,2 but if you want to control more stuff just add on this method. 
        { 
         return src; 
        } 
        return ""; 
       } 
      } 
    }); 
+0

Нет, это не сработает. Может, я что-то упустил? – aprados

+0

Вы скопировали и вставили мой ответ и не сработали? : O на ym устройство не набирает 0,1 и 2, так что странно ... можете ли вы разместить свой xml? –

+0

Отлично! android: цифры = "..." сделали трюк! Спасибо! – aprados

Смежные вопросы