我正在尝试实现一种collpasing工具栏 - 但是没有工具栏(而不是工具栏,它将是一个下拉元素,它本质上是一个RelativeLayout,它正好位于下方的LinearLayout(下拉列表中的展开项)按下下拉列表后整个布局。
我考虑过实现折叠工具栏并将下拉列表放在工具栏中,但这可能不是一个好主意,因为下拉列表不是像imageview那样的静态组件。 我也在我的应用程序中使用ActionBar,因此迁移到工具栏很可能非常耗时,更不用说随附的所有技术问题了。
除此之外,我考虑过在列表视图中检测移动/滚动方向,然后隐藏/显示下拉菜单,但是当我只是将手指放在列表视图上时它就会非常错误(它发疯并切换从上到下,反之亦然非常快,直到我举起手指才停止。
答案 0 :(得分:0)
ListView
有默认scrollListener
。您可以使用它来知道它是否滚动。然后隐藏dropDown!
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
//detect stop. have a counter then view the dropDown
}
@Override
public void onScroll(AbsListView absListView, int i, int i1, int i2) {
//Hide dropDown
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(mLastFirstVisibleItem<firstVisibleItem)
{
Log.i("SCROLLING DOWN","TRUE");
}
if(mLastFirstVisibleItem>firstVisibleItem)
{
Log.i("SCROLLING UP","TRUE");
}
mLastFirstVisibleItem=firstVisibleItem;
}
}
});
答案 1 :(得分:0)
我对其他人的建议非常好奇,因为我前段时间与之抗争。 Finnaly我正在列表视图中检测移动/滚动方向,然后隐藏/显示标题(如您所述)。我是这样做的(我没有错误):
listView.setOnScrollListener(OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
final int currentFirstVisibleItem = view.getFirstVisiblePosition();
if (currentFirstVisibleItem > mLastFirstVisibleItem) header.setVisibility(View.GONE);
else if (currentFirstVisibleItem < mLastFirstVisibleItem) header.setVisibility(View.VISIBLE);
mLastFirstVisibleItem = currentFirstVisibleItem;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
我最后用标题来显示/隐藏动画。