如何获取Activity的windowToken没有视图?

时间:2011-10-17 04:53:28

标签: android android-activity

现在,当用户触摸键盘外时,我尝试隐藏软键盘:

((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(editView.getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);

我想把逻辑放在我的基础活动类中,所以如果没有View可以getWindowToken吗?

7 个答案:

答案 0 :(得分:36)

在Activity中编写OnPageChangeListener时遇到了完全相同的问题。您可以使用其中一种解决方案。之一:

getWindow().getDecorView().getRootView().getWindowToken()   

或:

findViewById(android.R.id.content).getWind‌​owToken()

答案 1 :(得分:18)

当然可以使用:

getContentView().getWindowToken()

或者您可以参考SO Quest

答案 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