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

dor*_*rin 14 android listview scroll 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.hide();
                    }
                }

                if (mLastFirstVisibleItem > firstVisibleItem) {
                    if (!actionBar.isShowing()) {
                        actionBar.show();
                    }
                }
                mLastFirstVisibleItem = firstVisibleItem;
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

小智 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));
Run Code Online (Sandbox Code Playgroud)

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

  • 坏链接 - 404( (2认同)