我目前正在使用 Android Studio 开发 Android 应用程序,但我面临着一个似乎无法解决的持续问题。当我在与“EditText”视图交互时打开软键盘时,就会出现问题。打开软键盘后,导航栏会弹出,关闭键盘后又无法隐藏了。
我尝试了几种在线解决方案来解决这个问题。最初,我使用应用于布局的标志,但遇到了一个问题,即每当用户打开键盘时标志都会被清除。为了解决这个问题,我实现了一个全局监听器,甚至硬编码了一个标志来跟踪键盘关闭,但这在某些设备上被证明是无效的。我还尝试调用 onBackPressed 方法内的标志,但问题仍然存在。最近,我尝试使用 WindowInsetsController,但不幸的是问题仍然存在。下面是当前在 Activity 的 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>