Android ActionBar Скрыть / показать при прокрутке списка

Я хочу Скрыть / Показать панель действий совместимости, когда пользователь прокручивает вверх / вниз listview. Когда панель действий исчезнет, список будет занимать также пространство панели действий.

я следовал подходу, но он генерирует уродливое мерцание. Есть ли у кого решение этой проблемы? Желаемое поведение похоже на механизм hide/show в приложении 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;
            }
        });
    }

4 ответов


чтобы избежать мерцания, вызванного корректировкой макета, можно использовать свойство overlaying в панели действий.

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

но это решение приводит к тому, что панель действий накладывается на ваш listview, поэтому вам нужно добавить заголовок такого размера:

"?android:attr/actionBarSize"

например :

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

будьте осторожны с другими элементами, такими как навигация ящик который также повлиян на этим.


вам нужно сделать панель действий накладывается на listview. Делая это, вы несете ответственность за управление скрытием и показом панели действий, когда это необходимо.

пример приведен на следующей странице: 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


смотрите мой ответ по этой ссылке: Как скрыть и показать панель действий Android, как в приложении Google Inbox? Я использую RecyclerView, но идея та же