5

У меня есть edittext, который должен функционировать как текстовое поле в iOS. Когда я нажимаю на него, он должен стать редактируемым, иначе он должен быть отключен. Предположим, пользователь хочет отредактировать определенное значение, и когда он нажимает кнопку «Назад», а также на клавиатуре, я хочу, чтобы edittext стал отключенным для редактирования.Обнаружение закрытия события клавиатуры в Android

Все, что я использую, это метод setCursorVisible (true) и setCursorVisible (false). Я попытался использовать события keyCode, но они не помогают. Это то, что я пробовал до сих пор:

@Override 
    public void onBackPressed() { 
// Had the InputMethodManager service here.. 
     if(imm.isAcceptingText()) 
     { 
      Toast.makeText(ProfileActivity.this,"working",Toast.LENGTH_SHORT).show(); 
     } 
else { 
      super.onBackPressed(); 
      Toast.makeText(ProfileActivity.this,"back pressed called",Toast.LENGTH_SHORT).show(); 
     } 
    } 

Также попробовал переопределить событие keyDown.

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     //replaces the default 'Back' button action 
     if(keyCode==KeyEvent.KEYCODE_BACK) 
     { 

      Log.d("123","called,called"); 
      return true; 

     } 
     return super.onKeyDown(keyCode, event); 
    } 

ответ

13

Как насчет creating a subclass of EditText and overriding its onKeyPreIme method

/** 
* This class overrides the onKeyPreIme method to dispatch a key event if the 
* KeyEvent passed to onKeyPreIme has a key code of KeyEvent.KEYCODE_BACK. 
* This allows key event listeners to detect that the soft keyboard was 
* dismissed. 
* 
*/ 
public class ExtendedEditText extends EditText { 

    public ExtendedEditText(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 

    } 

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

    } 

    public ExtendedEditText(Context context) { 
     super(context); 

    } 

    @Override 
    public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
      dispatchKeyEvent(event); 
      return false; 
     } 
     return super.onKeyPreIme(keyCode, event); 
    } 

} 
+0

@Override общественного логический onKeyPreIme (INT KEYCODE, KeyEvent событие) { если (KEYCODE == KeyEvent.KEYCODE_BACK) {// Пользователь нажал клавишу Назад. Поэтому скройте клавиатуру InputMethodManager mgr = (InputMethodManager) context.getSystemService (Context.INPUT_METHOD_SERVICE); mgr.hideSoftInputFromWindow (this.getWindowToken(), 0); // TODO: Скрыть ваше мнение, как вы это делаете } return false; } – AndroidMech

+0

Пробовал использовать это ... но действие завершается сразу же после нажатия. Я хочу, чтобы действие было закончено во второй раз, когда я нажимаю назад. На первом обратном направлении, Отключить клавиатуру и setCursorVisible (false) это то, что я ожидаю. – AndroidMech

+1

Вы имеете в виду следующее: http://stackoverflow.com/questions/8430805/android-clicking-twice-the-back-button-to-exit-activity? – Slartibartfast