按下箭头键时隐藏键盘

9
图片显示了我的应用程序的一部分,一个带有附加适配器的AutoCompleteTextView。 当用户输入内容时,会显示自动完成建议。
我遇到的问题是:当建议被显示并且设备的向下箭头被按下时,只有来自AutoCompleteTextView的建议被关闭,键盘保持打开状态,需要再次点击向下箭头才能消失。
我希望在第一次点击向下箭头时建议和键盘都消失。
我尝试重写onBackPressed,但当点击向下箭头时它不被调用,可能因为它不被视为“返回”。
我该如何做呢?
编辑:我知道如何以编程方式隐藏键盘,但我想知道如何检测“向下箭头”点击。

试着看一下这个关闭/隐藏Android软键盘 - Oleg Osipenko
我知道如何通过编程隐藏键盘,但我猜我的问题是检测“向下箭头”点击。 - fweigl
也许我很笨,但我不明白您指的是哪个下键?是来自物理键盘的那个吗? - Haspemulator
@Haspemulator 他指的是屏幕截图底部的三角形。通常它指向左侧,但现在指向下方。 - SilentKnight
仅仅说屏幕的“返回按钮”!!! - Maveňツ
3个回答

7
尝试覆盖您的AutoCompleteTextView中的onKeyPreIme()方法,如下所示:
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == 1) {
        super.onKeyPreIme(keyCode, event);
        hideKeyboard()
        return true;
    }
    return super.onKeyPreIme(keyCode, event);
}

1
更详细的解释请参考:https://stackoverflow.com/a/32541562/6327554 - Marc Alexander

0
你可以尝试这样做:
private boolean mIsKeyboardShown;
private EditText mSearchTextView;

@Override
protected void onCreate(Bundle bundle)
  ...
  mSearchTextView = (EditText) findViewById(R.id.search);
  View activityRootView = findViewById(R.id.activityRoot);
  activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
      @Override
      public void onGlobalLayout() {
          int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
          // if more than 100 pixels, its probably a keyboard...
          mIsKeyboardShown = (heightDiff > 100);
       }
  });
}

public void onBackPressed() {
  if(mIsKeyboardShown) {
    // close the keyboard
    InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(mSearchTextView.getWindowToken(), 0);
  } else {
    super.onBackPressed();
  }
}

我还没有尝试过这个代码,但我认为这是正确的方法。


-3
InputMethodManager inputManager = (InputMethodManager)
                                  getSystemService(Context.INPUT_METHOD_SERVICE); 

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                     InputMethodManager.HIDE_NOT_ALWAYS);

你需要导入 android.view.inputmethod.InputMethodManager;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接