androidkeyboardonkeylistener

KeyBoard : setonkeylistener not working for EditText


I am created an app which toast some text when user click on android keyboard's ENTER key but its working on my desktop keyboard means when i click on desktop keyboard's enter key its making toast.
So what could i do for android keyboard's enter key????

HERE is code:

public class MainActivity extends AppCompatActivity implements View.OnKeyListener{

EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText=(EditText)findViewById(R.id.editText);
    editText.setOnKeyListener(this);
}

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_ENTER){
        Toast.makeText(this,editText.getText().toString()+"Enter Pressed",Toast.LENGTH_LONG).show();
        return true;
    }
    return false;
}

}


Solution

  • Try using this: Filter your action first using KeyEvent.ACTION_DOWN

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if ((event.getAction() == KeyEvent.ACTION_DOWN)
                && (keyCode == KeyEvent.KEYCODE_ENTER)) {
            Toast.makeText(this,editText.getText().toString()+"Enter Pressed",Toast.LENGTH_LONG).show();
            return true;
        }
        return false;
    }
    

    EDIT

    use an setOnEditorActionListener on your Edittext

    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if ( (actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN ))){
                    Toast.makeText(this,editText.getText().toString()+"Enter Pressed",Toast.LENGTH_LONG).show();
                    return true;
                }
                else{
                    return false;
                }
            }
        });
    

    Make sure in XMl you had:

    <EditText
        android:imeOptions="actionDone"
        android:inputType="text"/>