如何在没有view的情况下获取Activity的windowToken?

发布于 2024-12-10 10:08:27 字数 260 浏览 0 评论 0原文

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

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

我想将逻辑放在我的基本活动类中,所以是否可以在没有视图的情况下获取WindowToken?

Now, I try to hide the softkeyboard when user touch outside the keyboard:

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

I want put the logic in my base activity class, so if it is possible to getWindowToken without View?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

知足的幸福 2024-12-17 10:08:27

在 Activity 中编写 OnPageChangeListener 时,我遇到了完全相同的问题。您可以使用这些解决方案之一。要么:

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

要么:

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

I faced exactly the same problem, while writing OnPageChangeListener within an Activity. You can use one of these solutions. Either:

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

or:

findViewById(android.R.id.content).getWind‌​owToken()
躲猫猫 2024-12-17 10:08:27

当然你可以使用:

getContentView().getWindowToken()

或者你可以参考 SO Quest

Surely you can use:

getContentView().getWindowToken()

or you can refer to SO Quest

风透绣罗衣 2024-12-17 10:08:27

简单使用getWindow().getDecorView().getWindowToken()

Simply use getWindow().getDecorView().getWindowToken()

北方的巷 2024-12-17 10:08:27
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;
}
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;
}
倾城泪 2024-12-17 10:08:27

您可以直接从窗口的 WindowManager.LayoutParams 获取令牌

getWindow().getAttributes().token

You could just get the token from the WindowManager.LayoutParams of the window directly

getWindow().getAttributes().token
穿透光 2024-12-17 10:08:27

在 kotlin 中:

val imm  = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(window.attributes.token, 0)

或者,如果你有一个视图:

imm.hideSoftInputFromWindow(view.windowToken, 0)

In kotlin:

val imm  = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(window.attributes.token, 0)

Or, If you have a view:

imm.hideSoftInputFromWindow(view.windowToken, 0)
℉服软 2024-12-17 10:08:27

您可以在清单文件活动标记上尝试此操作以隐藏键盘。

 android:windowSoftInputMode="stateHidden"

You can try this on your manifest file activity tag to hide keyboard.

 android:windowSoftInputMode="stateHidden"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文