【发布时间】:2014-04-28 10:23:38
【问题描述】:
我想在键盘最小化后立即隐藏光标并做一些其他事情。我已经启用了光标并在触摸编辑文本时显示键盘,但是我无法找到一种方法来知道用户何时在不按“完成”的情况下将其最小化。
有没有办法做到这一点?
【问题讨论】:
标签: android android-edittext android-softkeyboard keyevent
我想在键盘最小化后立即隐藏光标并做一些其他事情。我已经启用了光标并在触摸编辑文本时显示键盘,但是我无法找到一种方法来知道用户何时在不按“完成”的情况下将其最小化。
有没有办法做到这一点?
【问题讨论】:
标签: android android-edittext android-softkeyboard keyevent
试试下面的代码:-
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
activityRootView.getWindowVisibleDisplayFrame(r);
int heightDiff = activityRootView.getRootView()
.getHeight() - (r.bottom - r.top);
if (lastDiff == heightDiff)
return;
lastDiff = heightDiff;
Log.i("aerfin","arefin "+lastDiff);
if (heightDiff > 100) { // if more than 100 pixels, its
// probably a keyboard...
flag2 = 0;
} else {
if (flag == false)
flag2 = 1;
}
}
});
更多信息请参阅下面的链接,对我来说最少使用完整:-
Maintain keyboard open/closed state for EditText when app comes to foreground
【讨论】:
在您的清单中,通过将此行作为参数放在清单中的 <activity> 标记中,确保配置在键盘显示或隐藏时发生更改:
android:configChanges="orientation|keyboardHidden"
然后在您的Activity 中覆盖此方法。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks whether a hardware keyboard is available
if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
} else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
}
}
【讨论】:
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
//to show soft keyboard
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
//to hide it, call the method again
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
【讨论】: