ListView 重叠折叠工具栏

Posted

技术标签:

【中文标题】ListView 重叠折叠工具栏【英文标题】:ListView overlaps Collapsing Toolbar 【发布时间】:2019-05-23 00:34:26 【问题描述】:

我曾经使用 android Studio 中的 Project-Template 设置一个折叠工具栏,并尝试在 NestedScrollView 中实现一个 ListView(参见下面的代码)

我有最新的 Android Studio 版本,并且 AVD 在 Android 9 上运行

我已经试过了

    更改 NestedScrollView 的 android:fillViewport="true" 实现我自己的 ListView (Collapsing Toolbar with ListView) 将 ListView 包装到 LinearLayout 中

我找到了几个使用RecyclerView 的解决方案,我不想使用这种方法 - 如果这是最后一种方法,我会;)。 (这是一个学校项目,我们应该只使用我们在学校学到的组件掌心

我将跳过以下几个 XML 导入行:

<android.support.design.widget.CoordinatorLayout 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_
    android:layout_
    android:fitsSystemWindows="true"
    tools:context=".MainScreen">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_
        android:layout_
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_
            android:layout_
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:toolbarId="@+id/toolbar">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_
                android:layout_
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <fragment
        android:id="@+id/fragment1"
        android:name="net.mountdev.alcohollevel.EntryList"
        android:layout_
        android:layout_ />


    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_
        android:layout_
        android:layout_margin="@dimen/fab_margin"
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|end"
        app:srcCompat="@drawable/ic_add_white_24dp" />

</android.support.design.widget.CoordinatorLayout>

嵌套列表视图

<android.support.v4.widget.NestedScrollView 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_
    android:layout_
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainScreen"
    tools:showIn="@layout/activity_main_screen">

        <ListView android:id="@id/android:list"
            android:layout_
            android:layout_
            android:drawSelectorOnTop="false"/>

</android.support.v4.widget.NestedScrollView>

目前的结果是,ListView 在 ActionBar 中不应该是(见截图)

【问题讨论】:

【参考方案1】:

问题在于fragment。它占据了整个空间。尝试类似

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_
    android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_
        android:layout_
        android:fitsSystemWindows="true">

    <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_
            android:layout_
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:toolbarId="@+id/toolbar">

        <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_
                android:layout_
                app:layout_collapseMode="pin"
        />

    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<fragment
        android:layout_below="@+id/app_bar"
        android:id="@+id/fragment1"
        android:layout_
        android:layout_/>


<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_
        android:layout_
        app:layout_anchor="@id/app_bar"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="25dp"
        android:layout_marginEnd="16dp"
        app:layout_anchorGravity="bottom|end"/>

【讨论】:

【参考方案2】:

android.support.design.widget.CoordinatorLayout 更改为RelativeLayout

在你的AppBarLayout 中使用android:layout_alignParentTop="true"

为您的fragment 添加android:layout_below="@+id/app_bar"

【讨论】:

谢谢! ListView 现在位于工具栏下方,但仅显示一个元素 (?)。 floatActionButton 也移到了左上角(如果认为以后可以修复)。 对于浮动按钮添加到它 android:layout_alignParentBottom="true" android:layout_alignParentRight="true" 并且对于可能是因为滚动视图的元素将其更改为其他内容

以上是关于ListView 重叠折叠工具栏的主要内容,如果未能解决你的问题,请参考以下文章

java 折叠工具栏在“折叠”工具栏中添加viewFlipper

工具栏折叠时如何使用动画调整搜索视图宽度 [ANDROID]

工具栏折叠时显示视图

带有折叠工具栏的Android SlidingTabLayout错误定位

什么是外边距重叠?重叠的结果是什么?

Whatsapp 喜欢折叠工具栏