【问题标题】:How to hide soft navigation keys (android)如何隐藏软导航键 (android)
【发布时间】:2016-02-19 08:55:43
【问题描述】:

我正在使用原生应用程序胶水完全用 C 语言制作一个 android 应用程序。这个应用程序中根本没有 java。我正在尝试找到一种隐藏软输入键的方法,我已经尝试过

ANativeActivity_hideSoftInput(app->activity, ANATIVEACTIVITY_HIDE_SOFT_INPUT_IMPLICIT_ONLY);

ANativeActivity_hideSoftInput(app->activity, ANATIVEACTIVITY_HIDE_SOFT_INPUT_NOT_ALWAYS);

没有运气。我也尝试将其放入我的 android 清单中:

<activity 
android:windowSoftInputMode="stateAlwaysHidden" 
...

<activity
android:windowSoftInputMode="stateHidden"
...

没有运气。任何方向表示赞赏。

【问题讨论】:

  • windowSoftInputMode 与键盘有关。你应该改用View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
  • 那会去哪里?
  • 我也遇到了同样的问题,运气好吗?

标签: c android-ndk


【解决方案1】:

这是一个非常古老的问题,但我最近遇到了同样的问题。在此对话中找到了以下实现:https://www.gamedev.net/forums/topic/674511-auto-hide-nav-bar-on-android-app-ndk/

要隐藏顶部的导航栏,您需要将此行添加到您的AndroidManifest.xml

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

你可以这样添加

        <activity android:name="android.app.NativeActivity"
                android:label="@string/app_name"
                android:configChanges="orientation|keyboardHidden"
                android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

要隐藏底部的导航栏需要编写如下代码。

void AutoHideNavBar(struct android_app* state)
{
    JNIEnv* env;
    state->activity->vm->AttachCurrentThread(&env, NULL);

    jclass activityClass = env->FindClass("android/app/NativeActivity");
    jmethodID getWindow = env->GetMethodID(activityClass, "getWindow", "()Landroid/view/Window;");

    jclass windowClass = env->FindClass("android/view/Window");
    jmethodID getDecorView = env->GetMethodID(windowClass, "getDecorView", "()Landroid/view/View;");

    jclass viewClass = env->FindClass("android/view/View");
    jmethodID setSystemUiVisibility = env->GetMethodID(viewClass, "setSystemUiVisibility", "(I)V");

    jobject window = env->CallObjectMethod(state->activity->clazz, getWindow);

    jobject decorView = env->CallObjectMethod(window, getDecorView);

    jfieldID flagFullscreenID = env->GetStaticFieldID(viewClass, "SYSTEM_UI_FLAG_FULLSCREEN", "I");
    jfieldID flagHideNavigationID = env->GetStaticFieldID(viewClass, "SYSTEM_UI_FLAG_HIDE_NAVIGATION", "I");

    int flagFullscreen = env->GetStaticIntField(viewClass, flagFullscreenID);
    int flagHideNavigation = env->GetStaticIntField(viewClass, flagHideNavigationID);

    int flag = flagFullscreen | flagHideNavigation;

    env->CallVoidMethod(decorView, setSystemUiVisibility, flag);

    state->activity->vm->DetachCurrentThread();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2022-12-14
    • 2012-02-18
    • 2023-01-09
    • 1970-01-01
    相关资源
    最近更新 更多