安卓弹出软键盘时隐藏底部导航

Android 2021-07-18 阅读 228 评论 0

问题描述

安卓项目中使用 ahbottomnavigation 或者 BottomNavigationView 底部导航,当屏幕弹出输入键盘时,底部导航会跟随在键盘上面,感觉不是很美观,尝试在出现键盘时隐藏底部导航。

AndroidManifest.xml 内容如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.newest">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:allowBackup="false"
      android:theme="@style/AppTheme">
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
        android:launchMode="singleTask"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>
    </application>
</manifest>

解决方法

参考 android:windowSoftInputMode 的文档说明。

描述
stateUnspecified不指定软键盘的状态(隐藏还是可见)。系统会选择合适的状态,或依赖主题中的设置。

这是对软键盘行为的默认设置。

stateUnchanged当 Activity 转至前台时保留软键盘最后所处的任何状态,无论是可见还是隐藏。
stateHidden当用户选择 Activity 时(换言之,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时)隐藏软键盘。
stateAlwaysHidden当 Activity 的主窗口有输入焦点时始终隐藏软键盘。
stateVisible在正常的适宜情况下(当用户向前导航到 Activity 的主窗口时)显示软键盘。
stateAlwaysVisible当用户选择 Activity 时(换言之,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时)显示软键盘。
adjustUnspecified不指定 Activity 的主窗口是否通过调整尺寸为软键盘腾出空间,或者是否通过平移窗口内容以在屏幕上显示当前焦点。根据窗口的内容是否存在任何可滚动其内容的布局视图,系统会自动选择其中一种模式。如果存在这种视图,系统会调整窗口尺寸,前提是可通过滚动操作在较小区域内看到窗口的所有内容。

这是对主窗口行为的默认设置。

adjustResize始终调整 Activity 主窗口的尺寸,以为屏幕上的软键盘腾出空间。
adjustPan不通过调整 Activity 主窗口的尺寸为软键盘腾出空间。相反,窗口的内容会自动平移,使键盘永远无法遮盖当前焦点,以便用户始终能看到自己输入的内容。这通常不如调整窗口尺寸可取,因为用户可能需关闭软键盘才能进入被遮盖的窗口部分,并与之进行交互。

修改 android:windowSoftInputModeadjustPan 即可。

 <activity android:name=".MainActivity"
        android:windowSoftInputMode="adjustPan">
最后更新 2021-07-18
MIP.watch('startSearch', function (newVal, oldVal) { if(newVal) { var keyword = MIP.getData('keyword'); console.log(keyword); // 替换当前历史记录,新增 MIP.viewer.open('/s/' + keyword, {replace: true}); setTimeout(function () { MIP.setData({startSearch: false}) }, 1000); } }); MIP.watch('goHome', function (newVal, oldVal) { MIP.viewer.open('/', {replace: false}); });