6 回答

TA贡献1796条经验 获得超7个赞
试试这个:
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

TA贡献1830条经验 获得超9个赞
要捕获键盘的打开/关闭事件,请使用以下代码:
//...
private int layoutSize = 0;
private boolean isKeyboardVisible = false;
//...
@Override
public void onCreate(Bundle savedInstanceState) {
setKeyboardOpenListener();
}
//...
private void setKeyboardOpenListener() {
View activityRootView = findViewById(android.R.id.content);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
if (activityRootView.getHeight() + Util.getStatusBarHeight(this) >= layoutSize) {
layoutSize = activityRootView.getHeight();
if (isKeyboardVisible) {
isKeyboardVisible = false;
onKeyboardClose();
}
} else {
if (!isKeyboardVisible) {
isKeyboardVisible = true;
onKeyboardOpen();
}
}
});
}
//...
public static int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}

TA贡献1780条经验 获得超1个赞
最近我用一个好的库解决了这个问题。它处理键盘可见性事件。
将其添加到您的应用程序级Gradle文件。
dependencies {implementation'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.3.0'}
启用键盘事件:
KeyboardVisibilityEvent.setEventListener( getActivity(), new KeyboardVisibilityEventListener() { @Override public void onVisibilityChanged(boolean isOpen) { if (isOpen) //Keyboard is showing. else yourEditText.clearFocus() yourEditText.setCursorVisible(false) //Only if the cursor keeps blinking else no need use it. //Keyboard is now closed. } });
遗憾的是,没有“正确”的方法来处理键盘可见性事件。你得到的只是黑客来检测它。
添加回答
举报