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

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

На следующей странице приведен пример: http://www.techrepublic.com/article/pro-tip-maximize-android-screen-real-estate-by-showing-and-hiding-the-action-bar/