Android 自定义工具栏导致 ListView 在键盘出现时不滚动浏览所有元素

Android cutom Toolbar causes ListView to not scroll through all elements when keyboard appears

我实现了自己的工具栏(Top App Bar)以添加一些额外的功能。工具栏很好用,就像默认工具栏一样 (ActionBar) android 仅提供标题。然而,工具栏隐藏了状态栏,更重要的是,当 android 键盘出现时,我的 ListView 没有滚动所有元素,它停在它的那个显示了它的一半。

我想拥有与默认 ActionBar 相同的功能,并在上面放上我想要的物品。

主要布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical"
    tools:context=".MessageActivity">

    <androidx.appcompat.widget.Toolbar
        android:orientation="vertical"
        android:id="@+id/message_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:layout_scrollFlags="scroll|enterAlways"
        app:contentScrim="?attr/colorPrimary"
        />

    <ListView
        android:layout_width="match_parent"
        android:id="@+id/messages_view"
        android:layout_weight="2"
        android:divider="#fff"
        android:layout_height="match_parent"
        android:smoothScrollbar="true"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:orientation="horizontal">
        <EditText
            android:id="@+id/editText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="@string/write_your_message"
            android:inputType="text"
            android:paddingHorizontal="10dp"
            android:text="" />


        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:scaleType="fitCenter"
            android:padding="20dp"
            android:layout_marginHorizontal="10dp"
            android:background="@drawable/ic_send_black_24dp"
            android:onClick="sendMessage"/>
    </LinearLayout>
</LinearLayout>

菜单(顶部应用栏):

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/settings_label"
        android:title="@string/title_activity_settings" />
    <item
        android:id="@+id/convo_label"
        android:checked="true"
        app:showAsAction="ifRoom"
        android:title="@string/convo" />
    <item
        android:id="@+id/returnHome"
        android:icon="@drawable/outline_home_24"
        app:showAsAction="ifRoom"
        android:title="@string/title_home" />
</menu>

问题更新:

问题是样式 xml 对我的无操作栏有 <item name="android:windowFullscreen">true</item>。所以本来我有

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

此更改使其生效:

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

将属性 android:windowSoftInputMode="adjustResize" 添加到 AndroidManifest.xml 中的 activity 标签。它使软键盘上推视图,使所有项目都可访问。

示例:

<application ...>
  <activity
    android:windowSoftInputMode="adjustResize"
    android:name=".MainActivity" />
</application>

参见:windowSoftInputMode