Android ActionBar hide / show beim Scrollen Listenansicht

? dorin @ | Original: StackOverFlow
---

Ich möchte zu verbergen / zeigen die Kompatibilität Aktionsleiste, wenn der Benutzer einen Bildlauf nach oben / unten ein Listview . Wenn der Aktionsleiste verschwindet die Liste Raum der Aktionsleiste besetzen auch .

Ich habe einen Ansatz verfolgt, aber es ein hässliches Flimmern erzeugt . Hat jemand eine passende Lösung für dieses Problem? Das gewünschte Verhalten ist wie die hide / show Mechanismus in der Google+ App (Ich bin nicht daran interessiert, über die Fußzeile) .

Was ich versucht habe sich wie folgt dar :

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 Antwort

1Eduardo Varela G&#243;mez @

Um das Flimmern durch die Neueinstellung der Layout können Sie die Überlagerung Immobilien in der Aktionsleiste verwenden zu vermeiden.

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

Diese Lösung bewirkt, dass der Aktionsleiste überlagert Ihre Listview, so müssen Sie einen Header mit dieser Größe hinzufügen müssen :

"?android:attr/actionBarSize"

for example :

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

Achten Sie darauf, mit anderen Elementen wie Navigation Schublade, die auch betroffen ist .

2Muatik @

Sie müssen sicherstellen, die Aktionsleiste überlagert die Listenansicht . Auf diese Weise haben Sie die Verantwortung, das Aus- und Einblenden der Aktionsleiste bei Bedarf zu verwalten.

Es ist ein Beispiel auf der folgenden Seite:  http://www.techrepublic.com/article/pro-tip-maximize-android-screen-real-estate-by-showing-and-hiding-the-action-bar/