CoordinatorLayout 不工作

CoordinatorLayout not working

我正在尝试实施 CoordinatorLayout 来自新宣布的 Android Design Support Library and I have used the following code in my XML layout as per the sample here:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:layout_scrollFlags="scroll|enterAlways"/>

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

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

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

但是,当我向下滚动视图时,操作栏不会隐藏。我不明白为什么这不起作用。

编辑: 据我所知,CoordinatorLayout 似乎不适用于 ListView/GridView/ScrollViews,仅适用于 RecyclerViewNestedScrollView。不幸的是,简单地切换到这些视图之一对我来说是不可能的,所以我仍在寻找解决方案。

这取决于您在 ViewPager 中显示的内容。如果您使用列表/回收视图,它应该可以正确滚动。

Views can declare a default Behavior by using the CoordinatorLayout.DefaultBehavior(YourView.Behavior.class) annotation,or set it in your layout files by with the app:layout_behavior="com.example.app.YourView$Behavior" attribute. This framework makes it possible for any view to integrate with CoordinatorLayout.

所以我认为这里的解决方案是覆盖 AppBarLayout.Behavior class

我认为您需要让 ListView 实现 ScrollingViewNestedScrollingChild 接口。

这不是最简单的事情,但如果您查看 RecyclerView 的源代码,您应该能够做到。它使用了 NestedScrollingChildHelper,你应该也能做到。

目前并非所有视图都具有 CoordinatorLayout 的预期行为。

您的视图应该实现 NestedScrollView 接口并且必须处理嵌套的滚动事件。

RecyclerViewNestedScrollView(版本 22)支持此行为。 但是,您也可以使用 AbsListViewListViewGridView),但只能用于 API21+。

只需添加如下内容:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     listView.setNestedScrollingEnabled(true);
}

这对我有用。

这是GridView的代码。但是您可以扩展 ListView 而不是 GridView。

https://gist.github.com/sakurabird/6868765