2016-10-24 25 views
-1

Androidで「ソフトキーボードの終了」イベントを処理したいと思いますが、私が理解する限り、これを行う唯一の解決策は、this answerに従って行ったEditTextサブクラス化です。ここでAndroidソフトキーボード:「終了」の「完了」

は私のクラスである:

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

私は、ユーザーがソフトキーボードを閉じると、それが押された場合、それはアンドロイドで解釈されている、EditorInfo.IME_ACTION_DONEとして機能するように、このイベント(S)(KeyEvent.KEYCODE_BACKKeyEvent.ACTION_UP)が必要です"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

Tried。did not work。 – TranslucentCloud

+0

そして、私が理解する限り、これは "D 1 "が押されます。そして、「却下」が押されたときに私は行動が必要です。 – TranslucentCloud

関連する問題