CoordinatorLayout / AppBarLayout ExpandableListView被渲染出屏幕

还有更多的问题在使用CoordinatorLayout和AppBarLayout。

我正在尝试实现基本function,即在滚动屏幕时向下滚动屏幕,并在滚动屏幕时返回屏幕。

但是,我目前的设置显示出一个问题:不仅工具栏不滚动,ListView似乎在屏幕底部渲染。 就好像被AppBarLayout高度所抵消一样。

这里是一个描述问题的gif,请注意最后的项目也被closures了ScrollBar在屏幕之外:

在这里输入图像说明

我的布局很标准:

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/background"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:background="@color/orange" app:layout_scrollFlags="scroll|enterAlways"/> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipeToRefresh" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <ExpandableListView android:id="@+id/listView" android:groupIndicator="@android:color/transparent" android:layout_width="match_parent" android:dividerHeight="0px" android:layout_height="match_parent"/> </android.support.v4.widget.SwipeRefreshLayout> </android.support.design.widget.CoordinatorLayout> 

Solutions Collecting From Web of "CoordinatorLayout / AppBarLayout ExpandableListView被渲染出屏幕"

CoordinatorLayout只适用于RecyclerView或NestedScrollView.Try在NestedScrollView中包装ExapandableListView,或使用下面的代码为ExpandableListView制作NestedScrollingEnable。

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { expandablelistView.setNestedScrollingEnabled(true); }else { CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mSwipeLayout.getLayoutParams(); params.bottomMargin = heightOfAppBarCompat; mSwipeLayout.setLayoutParams(params); } 

编辑您可以使用else语句按照预期进行滚动工作。

我会写它作为评论,但在可读性方面,我将放弃这个信息作为答案。 如果它不能工作,让我知道,我会删除它…我想你应该告诉你的工具栏如何互动。 在我的应用程序工具栏看起来像这样:

 <android.support.v7.widget.Toolbar android:id="@+id/anim_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

请注意“app:layout_collapseMode”

 private int mPreviousVisibleItem; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { expListView.setNestedScrollingEnabled(true); } else { expListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem > mPreviousVisibleItem) { appBarLayout.setExpanded(false, true); } else if (firstVisibleItem < mPreviousVisibleItem) { appBarLayout.setExpanded(true, true); } mPreviousVisibleItem = firstVisibleItem; } }); }