2016-10-24 104 views
-1

我想在Android中处理“关闭软键盘”事件,并且据我所知,唯一的解决方法是按照this answer的小类EditTextAndroid软键盘:“完成”“关闭”

这里是我的类:

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); 
    } 
} 

我需要这个事件(S)(KeyEvent.KEYCODE_BACKKeyEvent.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一个“被推。我需要在“解除”被推送时采取行动。 – TranslucentCloud