I want to finish an activity when the soft keyboard is open, I want to override the back event of the soft keyboard and finish the activity.
I\'m using this but it\'s no
onKeyDown()
and onBackPressed()
doesn't work for this case. You have to use onKeyPreIme
.
Initially, you have to create custom edit text that extends EditText
. And then you have to implement onKeyPreIme
method which controls KeyEvent.KEYCODE_BACK
. After this, one back press enough for solve your problem. This solution works for me perfectly.
CustomEditText.java
public class CustomEditText extends EditText {
Context context;
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// User has pressed Back key. So hide the keyboard
InputMethodManager mgr = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(this.getWindowToken(), 0);
// TODO: Hide your view as you do it in your activity
}
return false;
}
In your XML
<com.YOURAPP.CustomEditText
android:id="@+id/CEditText"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
In your Activity
public class MainActivity extends Activity {
private CustomEditText editText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (CustomEditText) findViewById(R.id.CEditText);
}
}