-1

Я хочу обработать событие «отменить мягкую клавиатуру» в Android, и, насколько я понял, единственным решением для этого является подкласс EditText, который я сделал в соответствии с this answer ,Android Soft Keyboard: «Done» on «Dismiss»

Вот мой класс:

public class EditTextCustom extends EditText { 

    public EditTextCustom(Context context) { 
     super(context); 
    } 

    public EditTextCustom(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public EditTextCustom(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 
     super.onFocusChanged(focused, direction, previouslyFocusedRect); 
     if (listener != null) 
      listener.onStateChanged(this, true); 
    } 

    @Override 
    public boolean onKeyPreIme(int keyCode, @NonNull KeyEvent event) { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
      Log.d("Info", "Soft keyboard was hidden"); 
      if (listener != null) { 
       listener.onStateChanged(this, false); 
      } 
     } 
     return super.onKeyPreIme(keyCode, event); 
    } 

    KeyboardListener listener; 

    public void setOnKeyboardListener(KeyboardListener listener) { 
     this.listener = listener; 
    } 

    public interface KeyboardListener { 
     void onStateChanged(EditTextCustom keyboardEditText, boolean showing); 
    } 
} 

мне нужно это событие (ы) (KeyEvent.KEYCODE_BACK и KeyEvent.ACTION_UP) выступать в качестве EditorInfo.IME_ACTION_DONE, то есть, когда пользователь закрывает экранную клавиатуру, она интерпретируется Android, если она нажата "Done" и были внесены изменения в EditText.

Лучшая практика для реализации этого?

ответ

-1
mEtNumber.setOnEditorActionListener(new TextView.OnEditorActionListener() { 

     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       // do something, e.g. set your TextView here via .setText() 
       InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
       return true; 
      } 
      return false; 
     } 
    }); 

mEtNumber.setOnEditorActionListener (новый TextView.OnEditorActionListener() {

 @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       // do something, e.g. set your TextView here via .setText() 
       InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
       return true; 
      } 
      return false; 
     } 
    }); 

и в XML

андроид:. ImeOptions = "actionDone"

Это может помочь вам

+0

Пробовал. Не работал – TranslucentCloud

+0

И насколько я понял, это происходит, когда «D один "толкается. И мне нужно действие, когда «Dismiss» нажата. – TranslucentCloud