Android ActionBar hide / show ao rolar exibição de lista

? dorin @ | Original: StackOverFlow
---

Eu quero esconder / mostrar a barra de ação compatibilidade como o usuário rola para cima / baixo numa lista . Quando a barra de ação desaparece da lista vai ocupar também o espaço da barra de ação.

Eu tenho seguido uma abordagem, mas ele gera uma cintilação feio. Alguém tem uma solução adequada para este problema? O comportamento desejado é como o mecanismo hide / show no app Google+ ( Eu não estou interessado sobre o rodapé) .

O que eu tentei é apresentado a seguir :

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

Top 5 Responder

1Eduardo Varela G&#243;mez @

Para evitar a oscilação provocada pelo reajuste do layout que você pode usar a propriedade sobreposição na barra de ação .

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

Mas esta solução faz com que a barra de ação sobrepõe seu listview, então você precisa para adicionar um cabeçalho com este tamanho :

"?android:attr/actionBarSize"

for example :

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

Tenha cuidado com outros elementos como gaveta de navegação que também é afetado por isso.

2Muatik @

Você precisa fazer a barra de ação sobrepõe a listview . Ao fazer isso, você tem a responsabilidade de gerir de esconder e mostrar a barra de ação quando necessário.

Há um exemplo na seguinte página :  http://www.techrepublic.com/article/pro-tip-maximize-android-screen-real-estate-by-showing-and-hiding-the-action-bar/