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
,仅适用于 RecyclerView
和NestedScrollView
。不幸的是,简单地切换到这些视图之一对我来说是不可能的,所以我仍在寻找解决方案。
这取决于您在 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
实现 ScrollingView
和 NestedScrollingChild
接口。
这不是最简单的事情,但如果您查看 RecyclerView
的源代码,您应该能够做到。它使用了 NestedScrollingChildHelper
,你应该也能做到。
目前并非所有视图都具有 CoordinatorLayout
的预期行为。
您的视图应该实现 NestedScrollView
接口并且必须处理嵌套的滚动事件。
RecyclerView
和 NestedScrollView
(版本 22)支持此行为。
但是,您也可以使用 AbsListView
(ListView
和 GridView
),但只能用于 API21+。
只需添加如下内容:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
listView.setNestedScrollingEnabled(true);
}
这对我有用。
这是GridView的代码。但是您可以扩展 ListView 而不是 GridView。
我正在尝试实施 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
,仅适用于 RecyclerView
和NestedScrollView
。不幸的是,简单地切换到这些视图之一对我来说是不可能的,所以我仍在寻找解决方案。
这取决于您在 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
实现 ScrollingView
和 NestedScrollingChild
接口。
这不是最简单的事情,但如果您查看 RecyclerView
的源代码,您应该能够做到。它使用了 NestedScrollingChildHelper
,你应该也能做到。
目前并非所有视图都具有 CoordinatorLayout
的预期行为。
您的视图应该实现 NestedScrollView
接口并且必须处理嵌套的滚动事件。
RecyclerView
和 NestedScrollView
(版本 22)支持此行为。
但是,您也可以使用 AbsListView
(ListView
和 GridView
),但只能用于 API21+。
只需添加如下内容:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
listView.setNestedScrollingEnabled(true);
}
这对我有用。
这是GridView的代码。但是您可以扩展 ListView 而不是 GridView。