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

14

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

我尝试了一种方法,但它会产生难看的闪烁。有没有人有这个问题的正确解决方案?期望的行为类似于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.hide();
                    }
                }

                if (mLastFirstVisibleItem > firstVisibleItem) {
                    if (!actionBar.isShowing()) {
                        actionBar.show();
                    }
                }
                mLastFirstVisibleItem = firstVisibleItem;
            }
        });
    }

你有检查过 Google IO 最新的代码吗?它包含了最佳实践 https://github.com/google/iosched - Deniz
4个回答

5
为了避免由于布局调整而引起的闪烁,您可以在操作栏中使用覆盖属性。

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));

要小心其他元素,例如导航抽屉也会受到影响。


瓦雷拉·戈麦斯,我知道已经有一段时间了,但你能说一下“listview_header.xml”的内容吗? - Mohit

3

2

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接