如何强制隐藏软键盘

时间:2014-08-26 21:13:22

标签: android

由于这个主题很受欢迎,我不得不说我搜索了大量类似的问题,但仍然没有一个有效的解决方案。

问题简短描述:在我的Activity我有一个"搜索模式",当它启动时我会显示软键盘,当它完成时,我想隐藏键盘,但可以&# 39;找不到办法。

我尝试过:

  • 使用标记InputMethodManager.HIDE_IMPLICIT_ONLY而不是0
  • 使用标记InputMethodManager.HIDE_NOT_ALWAYS而不是0
  • 设置windowSoftInputMode="stateAlwaysHidden"
  • 设置windowSoftInputMode="stateHidden"

似乎没有任何效果,键盘保持可见。代码启动"搜索模式":

     private void onStartSearch(){
    isSearch = true;
    tvMyFriends.setVisibility(View.GONE);
    etSearch.setVisibility(View.VISIBLE);
    etSearch.startAnimation(AnimationUtils.loadAnimation(this, R.anim.on_show_search));
    etSearch.requestFocus();
    invalidateOptionsMenu();
    imm.showSoftInput(etSearch, InputMethodManager.SHOW_IMPLICIT);
}

完成"搜索模式的代码":

     private void onCancelSearch(){
    Animation animHideSearch = AnimationUtils.loadAnimation(this, R.anim.on_cancel_search);
    animHideSearch.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
            /* no action required */
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            etSearch.setVisibility(View.GONE);
            tvMyFriends.setVisibility(View.VISIBLE);
            isSearch = false;
            invalidateOptionsMenu();
            if(etSearch.getText().toString().length()>0)
                etSearch.setText("");
            etSearch.clearFocus();
            imm.hideSoftInputFromInputMethod(etSearch.getWindowToken(), 0);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
             /* no action required */
        }
    });
    etSearch.startAnimation(animHideSearch);
}

问题:我怎么能强迫该死的键盘消失?

UPD:设置赏金。仍在寻找可靠,独立于设备的解决方案来强制隐藏软键盘或检测键盘当前是否正在显示。

1 个答案:

答案 0 :(得分:1)

在将EditText的可见性更改为GONE之前隐藏键盘。

...
imm.hideSoftInputFromWindow(etSearch.getWindowToken(), 0);
etSearch.setVisibility(View.GONE);
...