I have an EditText
in an Activity
and I want it to be active and soft-keyboard be open when I open that Activity
. Here is my xml
for EditText
:
<EditText
android:background="@null"
android:cursorVisible="true"
android:elegantTextHeight="true"
android:enabled="true"
android:focusable="true"
android:hint="Search"
android:id="@+id/editText11"
android:inputType="textNoSuggestions|textCapSentences"
android:layout_centerVertical="true"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:singleLine="true"
android:textColor="#000000"
android:textCursorDrawable="@null" />
and I have used android:windowSoftInputMode="stateVisible"
for the activity in which I have this EditText
.
The problem is, when I press back
once, the keyboard does not hide(ideally it does in all other EditText
s) and when I press back
again, it closes the Activity
. On the first back
press, I am not getting a call to onBackPressed()
while on the second back
press, I do. Why is this kind of behaviour is happening and how to resolve it?
Edit What I want is, if keyboard is open, pressing back should close the keyboard and if the keyboard is not open, then close the activity.
Try this ...
create class called Util and put this code
public static void hideSoftKeyboard(Activity activity) {
final InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (inputMethodManager.isActive()) {
if (activity.getCurrentFocus() != null) {
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
}
}
and call on the onBackPressed() of Activity
I add below code in my BaseActivity.java
@Override
protected void onPause() {
super.onPause();
final InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
if (inputMethodManager != null && inputMethodManager.isActive()) {
if (getCurrentFocus() != null) {
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
}
Try like this,
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
//useful for hiding the soft-keyboard is:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
return true;
}
}
return super.onKeyDown(keyCode, event);
}
This may helps you
As Your Requirement :
if keyboard is open, pressing back should close the keyboard and if the keyboard is not open, then close the activity
I Have tested my code is work fine.
Step 1 : Create CustomEditText
like below.
<com.yourpackage.yourappname.CustomEditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Step 2 : Create CustomEditText.java
class.
public class CustomEditText extends EditText {
Context context;
private static Activity mSearchActivity;;
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if(mSearchActivity != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK){
KeyEvent.DispatcherState state = getKeyDispatcherState();
if(state != null){
if(event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0){
InputMethodManager mgr = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(this.getWindowToken(), 0);
}
else if(event.getAction() == KeyEvent.ACTION_UP && !event.isCanceled() && state.isTracking(event)){
mSearchActivity.onBackPressed();
return true;
}
}
}
return super.dispatchKeyEventPreIme(event);
}
}
Step 3 : In Your Activity intialize the CustomEditText and hide KeyBoard like below.
CustomEditText editText = (CustomEditText) findViewById(R.id.edittext);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
Step 4: In Your Activity simply Override
the onBackPressed()
method.
@Override
public void onBackPressed() {
super.onBackPressed();
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.