现在,当用户触摸键盘外时,我尝试隐藏软键盘:
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(editView.getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
我想把逻辑放在我的基础活动类中,所以如果没有View可以getWindowToken吗?
答案 0 :(得分:36)
在Activity中编写OnPageChangeListener
时遇到了完全相同的问题。您可以使用其中一种解决方案。之一:
getWindow().getDecorView().getRootView().getWindowToken()
或:
findViewById(android.R.id.content).getWindowToken()
答案 1 :(得分:18)
答案 2 :(得分:3)
简单使用getWindow().getDecorView().getWindowToken()
答案 3 :(得分:1)
public static final String M_TOKEN = "mToken";
@Nullable
protected IBinder getToken(Activity activity) {
try {
Field mTokenField = Activity.class.getDeclaredField(M_TOKEN);
mTokenField.setAccessible(true);
IBinder mToken = (IBinder) mTokenField.get(activity);
return mToken;
} catch (NoSuchFieldException e) {
// handle
} catch (IllegalAccessException e) {
// handle
}
return null;
}
答案 4 :(得分:1)
在科特林:
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(window.attributes.token, 0)
或者,如果您有视图:
imm.hideSoftInputFromWindow(view.windowToken, 0)
答案 5 :(得分:0)
您可以在清单文件活动代码上尝试此操作以隐藏键盘。
android:windowSoftInputMode="stateHidden"
答案 6 :(得分:0)
您可以直接从窗口的WindowManager.LayoutParams
获取令牌
getWindow().getAttributes().token