2016-05-04 3 views
1

Я пытался заставить это работать последние три часа, и теперь мне нужна ваша помощь. Я просто хочу, чтобы записать текст из моего EditText, когда пользователь нажимает кнопку «Готово»:Почему я не могу написать текст?

e.setOnKeyListener(new View.OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      Log.v(TAG, "KEYCODE: " +keyCode); 
      Toast.makeText(MainActivity.this, "" +keyCode, Toast.LENGTH_SHORT).show(); 

      if ((keyCode == EditorInfo.IME_ACTION_DONE) && (event.getAction() == KeyEvent.ACTION_DOWN)) { 

       Log.v(TAG, "DONE!"); 
       Toast.makeText(MainActivity.this, "" +e.getText(), Toast.LENGTH_LONG).show(); 

       return false; 
      } 
      return false; 
     } 
    }); 

Вот XML:

<EditText 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/editText" 
     android:layout_alignBottom="@+id/textView4" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_toRightOf="@+id/textView4" 
     android:layout_toEndOf="@+id/textView4" 
     android:imeOptions="actionDone" 
     android:inputType="text" 

     /> 

Проблема заключается в том, что мой onKey даже не показывая никаких тостов, и я не могу получить пользовательский ввод, когда они нажмут. Я попытался изменить так много вещей в моем if-заявлении, но теперь даже onKey не получает вызов. Что я делаю не так?

Спасибо, что нашли время, чтобы ответить на мой вопрос :)

ответ

3

Почему ваш код не работает отвечает в docs.

Ключевые давит на мягкие методы ввода не требуется для запуска методов в этом слушателю, и на самом деле не рекомендуется делать это. Клавиатура по умолчанию для Android не будет запускать их для любой клавиши для любого приложения , нацеленного на Jelly Bean или позже, и будет доставлять его только для некоторых нажатий клавиш для приложений, нацеленных на сэндвич с мороженым или ранее.

Если вы пытаетесь получить пользовательский ввод при нажатии сделано, вы можете попробовать что-то вроде

e.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if (actionId == EditorInfo.IME_ACTION_DONE) { 
      Toast.makeText(MainActivity.this, e.getText(), Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     return false; 
    } 
}); 
+0

Спасибо так много, вы решить мою проблему, я застрял в течение нескольких часов. Тогда для чего нужно использовать KeyListener? –

+0

Опять же из документов 'его следует использовать только в тех случаях, когда приложение имеет свою собственную экранную клавиатуру, а также хочет обрабатывать жесткие события клавиатуры, чтобы соответствовать им. Так что, угадывая, когда вы создаете пользовательскую клавиатуру, возможно, это может быть использовано для соответствия событиям клавиатуры. – Antrromet

+0

Если я хочу скрыть клавиатуру после того, как они нажмут, я могу просто вернуть false, правильно? –

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