-1

Ich möchte behandeln "weichen Tastatur" Ereignis in Android zu umgehen, und soweit ich das verstanden habe, ist die einzige Lösung, dies zu tun, EditText, die ich nach this answer tat .Android Soft Keyboard: "Done" auf "Dismiss"

Hier ist meine Klasse:

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

ich dieses Ereignis muß (s) (KeyEvent.KEYCODE_BACK und KeyEvent.ACTION_UP) als EditorInfo.IME_ACTION_DONE zu handeln, das heißt, wenn der Benutzer entlässt Soft-Tastatur, ist es von Android interpretiert, wenn sie gedrückt "Done" und die Änderungen an der EditText wurden angewendet.

Best Practice, um dies zu implementieren?

Antwort

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

und in xml

android. ImeOptions = "actionDone"

Dies kann Ihnen helfen

+0

Versucht, hat nicht funktioniert – TranslucentCloud

+0

Und soweit ich verstanden habe, macht das Dinge, wenn "D man "wird gedrängt. Und ich brauche eine Aktion, wenn "Dismiss" gedrückt wird. – TranslucentCloud

Verwandte Themen