11

我正在尝试CoordinatorLayout从新发布的Android 设计支持库中实现一个,并且按照此处的示例在我的 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并且仅适用于RecyclerViewand NestedScrollView。不幸的是,简单地切换到其中一个视图对我来说是不可能的,所以我仍在寻找解决方案。

4

5 回答 5

6

当前,并非所有视图都具有CoordinatorLayout.

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

The RecyclerViewand the NestedScrollView(version 22) 支持这种行为。但是,您也可以使用AbsListView(ListViewGridView),但只能使用 API21+。

只需添加如下内容:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     listView.setNestedScrollingEnabled(true);
}
于 2015-06-17T07:47:38.420 回答
4

我相信您需要同时ListView实现ScrollingViewNestedScrollingChild接口。

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

于 2015-06-08T21:12:31.923 回答
0

这取决于您在ViewPager. 如果您使用列表/recyclerview,它应该可以正确滚动。

于 2015-05-31T18:35:14.943 回答
0

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

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

于 2015-06-01T08:08:03.710 回答
-1

这对我来说是工作。

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

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

于 2015-06-28T20:10:49.493 回答