java - 登录表单:单击按钮时键盘隐藏,但单击edittext后不再显示
问题描述
我有一个带有编辑文本和登录按钮(连接)的登录表单。当用户单击编辑文本时,键盘打开,当他们单击登录按钮(连接)时,键盘消失。问题是如果用户在单击登录按钮后单击编辑文本,键盘会显示一秒钟,然后消失。使用 rootview 计算键盘是否显示,因为根据stackoverflow,这似乎是最简单的方法。我如何制作它以便在单击按钮后可以显示键盘?
点击监听器
boolean clicked=false;
connect.setOnClickListener(v -> {
clicked=true;
keyboard();
});
键盘法
void keyboard(){
InputMethodManager inputManager = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
final View activityRootView = findViewById(R.id.wrap);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
activityRootView.getWindowVisibleDisplayFrame(r);
if (clicked) {
int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 0.25 * activityRootView.getRootView().getHeight()) {
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
});
}
解决方案
每次布局更新都会调用您的 onGlobalLayout 侦听器,如果单击按钮后每次布局更新都会关闭键盘
if (heightDiff > 0.25 * activityRootView.getRootView().getHeight())
您可以直接在 ButtonClickListener 中直接关闭键盘
connect.setOnClickListener(v -> {
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); });