按下后隐藏软键盘

时间:2016-05-09 10:33:01

标签: android android-edittext android-manifest android-softkeyboard

我在EditText中有一个Activity,我希望它在我打开Activity时处于活动状态并打开软键盘。以下是xml的{​​{1}}:

EditText

我已将[{1}}用于我拥有此<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" /> 的活动。

问题是,当我按android:windowSoftInputMode="stateVisible"一次时,键盘不会隐藏(理想情况下,它会隐藏在所有其他EditText中),当我再次按back时,它会关闭EditText。在第一次back新闻发布会上,我是在第二次Activity新闻时接到back的来电,我这样做。为什么会发生这种行为以及如何解决?

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

4 个答案:

答案 0 :(得分:10)

试试这个......

创建名为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);
        }
    }
}

并调用Activity

的onBackPressed()

答案 1 :(得分:2)

我在BaseActivity.java中添加了以下代码

post_updated

答案 2 :(得分:1)

试试这个,

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

这可能有助于你

答案 3 :(得分:-1)

满足您的要求

  

如果键盘打开,按下后应关闭键盘,如果   键盘未打开,然后关闭活动

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

第1步:如下所示创建CustomEditText

 <com.yourpackage.yourappname.CustomEditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

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

}

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

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

        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

第4步:在您的活动中只需Override onBackPressed()方法。

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

    }