代码之家  ›  专栏  ›  技术社区  ›  Krai

安卓工作室关闭软键盘后,如何隐藏导航栏?

  •  0
  • Krai  · 技术社区  · 2 年前

    我目前正在使用安卓工作室开发一款安卓应用程序,我面临着一个似乎无法解决的持续问题。当我在与“EditText”视图交互时打开软键盘时,问题就出现了。打开软键盘后,导航栏弹出,关闭键盘后无法再次隐藏。

    我已经尝试了几种在线解决方案来解决这个问题。最初,我使用了应用于布局的标志,但遇到了一个问题,每当用户打开键盘时,标志都会被清除。为了解决这个问题,我实现了一个全局监听器,甚至硬编码了一个标志来跟踪键盘闭合,但事实证明这在某些设备上是无效的。我还尝试调用onBackPressed方法内部的标志,但问题仍然存在。最近,我尝试使用WindowInsetsController,但不幸的是,问题仍然存在。以下是当前在活动的onCreate方法内部调用的方法的代码片段,用于隐藏资产:

    public static void hideAssets(final Activity activity) {
        WindowCompat.setDecorFitsSystemWindows(activity.getWindow(), false);
        WindowInsetsControllerCompat windowInsetsControllerCompat = WindowCompat.getInsetsController
                (activity.getWindow(), activity.getWindow().getDecorView());
    
        windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars());
        windowInsetsControllerCompat.setSystemBarsBehavior(WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
    }
    

    这是我的应用程序的两个主题(其中一个用于启动/启动屏幕):

    <resources>
        <!-- Default Theme of App -->
        <style name="Theme.Eleanor" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="windowNoTitle">true</item>
            <item name="android:windowFullscreen">true</item>
            <item name="colorPrimary">#000F2E</item>
            <item name="colorPrimaryVariant">#000F2E</item>
            <item name="colorOnPrimary">@color/white</item>
            <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
            <item name="android:navigationBarColor">@android:color/transparent</item>
            <item name="android:windowContentTransitions">true</item>
            <item name="android:windowBackground">@android:color/transparent</item>
        </style>
    
        <!-- Theme for the Launch Screen -->
        <style name="Theme.Launch" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="windowNoTitle">true</item>
            <item name="android:windowFullscreen">true</item>
            <item name="colorPrimary">#000F2E</item>
            <item name="colorPrimaryVariant">#000F2E</item>
            <item name="colorOnPrimary">@color/white</item>
            <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
            <item name="android:navigationBarColor">@android:color/transparent</item>
            <item name="android:windowContentTransitions">true</item>
            <item name="android:windowBackground">@drawable/launch_screen</item>
        </style>
    </resources>
    

    这是我的android清单:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android">
    
        <application
            android:allowBackup="true"
            android:hardwareAccelerated="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:theme="@style/Theme.Eleanor">
            <activity android:name=".activity.SplashActivity"
                android:screenOrientation="portrait"
                android:exported="true"
                android:theme="@style/Theme.Launch">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".activity.SearchActivity"
                android:screenOrientation="portrait"
                android:exported="true">
            </activity>
            <activity android:name=".activity.ControlActivity"
                android:screenOrientation="portrait"
                android:exported="true">
            </activity>
        </application>
    
    </manifest>
    
    0 回复  |  直到 2 年前