CoordinatorLayout不起作用

我正在试图从新发布的Androiddevise支持库中实现一个CoordinatorLayout ,我已经在我的XML布局中使用了以下代码:

 <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 。 不幸的是,简单地切换到其中的一个意见是不可能的,所以我仍然在寻找一个解决scheme。

Solutions Collecting From Web of "CoordinatorLayout不起作用"

我相信你需要使你的ListView实现ScrollingViewNestedScrollingChild接口。

这不是最简单的事情,但是如果你看看RecyclerView的源代码,你应该可以做到。 它使用了一个NestedScrollingChildHelper ,你应该可以做同样的事情。

Currenlty并不是所有的视图都具有CoordinatorLayout的预期行为。

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

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

只要添加这样的东西:

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

这取决于你在ViewPager中显示的ViewPager 。 如果您使用list / recyclerview,它应该正确滚动。

视图可以通过使用CoordinatorLayout.DefaultBehavior(YourView.Behavior.class)注释来声明一个默认行为,或者使用app:layout_behavior =“com.example.app.YourView $ Behavior”属性在布局文件中设置它。 这个框架使得任何视图都可以与CoordinatorLayout集成。

所以我认为这里的解决scheme是覆盖AppBarLayout.Behavior类

这是为我工作。

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

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