滚动列表视图时,Android ActionBar隐藏/显示

当用户向上/向下滚动列表视图时,我想隐藏/显示兼容性操作栏。 当操作栏消失时,列表也会占用操作栏的空间。

我遵循了一种方法,但它会产生一种丑陋的闪烁。 有没有人有这个问题的正确解决方案? 所需的行为类似于Google+应用中的隐藏/显示机制(我对页脚不感兴趣)。

我尝试过的内容如下:

boolean tabletSize = getResources().getBoolean(R.bool.isTablet); if (!tabletSize) { final ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar(); lvNews.setOnScrollListener(new AbsListView.OnScrollListener() { private int mLastFirstVisibleItem; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (mLastFirstVisibleItem  firstVisibleItem) { if (!actionBar.isShowing()) { actionBar.show(); } } mLastFirstVisibleItem = firstVisibleItem; } }); } 

  • Android ScrollView拒绝滚动到底部
  • 如何检测Android ListView滚动停止?
  • Android系统。 一起滚动2个列表视图
  • Android:检测软键盘打开
  • 如何以编程方式滚动Android WebView
  • 对于-webkit-overflow-scrolling有多少支持:触摸
  • Android listView查找滚动的像素数量
  • 水平滚动网格视图
  • 为避免因重新调整布局而导致的闪烁,您可以使用操作栏中的覆盖属性。

    https://developer.android.com/training/basics/actionbar/overlaying.html

    但是此解决方案会导致操作栏覆盖列表视图,因此您需要添加具有以下大小的标头:

    "?android:attr/actionBarSize"

    例如 :

     mVideosListView = (ListView) getActivity().findViewById(android.R.id.list); mVideosListView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.listview_header,null)); 

    小心其他元素,如导航抽屉,也受此影响。

    您需要使操作栏覆盖列表视图。 通过这样做,您有责任在必要时管理隐藏和显示操作栏。

    以下页面有一个示例: http : //www.techrepublic.com/article/pro-tip-maximize-android-screen-real-estate-by-showing-and-hiding-the-action-bar/

    你可以尝试这个库。 希望它有助于https://github.com/ksoichiro/Android-ObservableScrollView

    请参阅我在该链接上的答案: 如何在Google Inbox应用中隐藏和显示Android ActionBar? 我正在使用RecyclerView,但想法是一样的