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. } });
遺憾的是,沒有“正確”的方法來處理鍵盤可見性事件。你得到的只是黑客來檢測它。
添加回答
舉報