按下后隐藏软键盘

Ami*_*ari 7 android android-manifest android-softkeyboard android-edittext

我有一个EditText,Activity我希望它是活动的,当我打开它时,软键盘会打开Activity.这是我xmlEditText:

<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" />
Run Code Online (Sandbox Code Playgroud)

我已经习惯android:windowSoftInputMode="stateVisible"了这项活动EditText.

问题是,当我按back一次键盘时,键盘不会隐藏(理想情况下它会在所有其他键盘中隐藏EditText),当我back再次按下键盘时,键盘会关闭Activity.在第一次back按下时,我没有接到onBackPressed()第二次back按下的电话,我这样做.为什么会发生这种行为以及如何解决?

编辑我想要的是,如果键盘打开,按下键应关闭键盘,如果键盘未打开,则关闭活动.

Nru*_*ikh 12

试试这个 ...

创建名为Util的类并放置此代码

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并调用Activity的onBackPressed()


小智 5

我在 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 0

根据您的要求

如果键盘打开,按返回键应关闭键盘,如果键盘未打开,则关闭活动

我已经测试过我的代码工作正常。

第 1 步:CustomEditText如下创建。

 <com.yourpackage.yourappname.CustomEditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)

第 2 步:创建CustomEditText.java类。

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

}
Run Code Online (Sandbox Code Playgroud)

步骤 3:在您的 Activity 中初始化 CustomEditText 并隐藏 KeyBoard,如下所示。

CustomEditText editText = (CustomEditText) findViewById(R.id.edittext);

        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
Run Code Online (Sandbox Code Playgroud)

第 4 步:在您的 Activity 中只需添加Override方法即可onBackPressed()

 @Override
    public void onBackPressed() {
        super.onBackPressed();

    }
Run Code Online (Sandbox Code Playgroud)