webentwicklung-frage-antwort-db.com.de

Android ActionBar beim Blättern in der Listenansicht ein-/ausblenden

Ich möchte die Kompatibilitäts-Aktionsleiste ausblenden/anzeigen, wenn der Benutzer in einer Listenansicht nach oben/unten blättert. Wenn die Aktionsleiste ausgeblendet wird, belegt die Liste auch den Platz der Aktionsleiste.

Ich habe einen Ansatz verfolgt, der jedoch ein hässliches Flackern erzeugt. Hat jemand eine richtige Lösung für dieses Problem? Das gewünschte Verhalten gleicht dem Ein-/Ausblenden-Mechanismus in der Google+ App (die Fußzeile interessiert mich nicht).

Was ich probiert habe, ist unten dargestellt:

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

Um das Flimmern zu vermeiden, das durch die Neueinstellung des Layouts verursacht wird, können Sie die überlagernde Eigenschaft in der Aktionsleiste verwenden. 

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

Diese Lösung bewirkt jedoch, dass die Aktionsleiste Ihre Listenansicht überlagert. Sie müssen also einen Header mit dieser Größe hinzufügen:

"?android:attr/actionBarSize"

zum Beispiel :

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

Seien Sie vorsichtig mit anderen Elementen wie der Navigationsleiste, die auch davon betroffen ist.

Sie müssen die Aktionsleiste über die Listenansicht legen. Auf diese Weise haben Sie die Verantwortung, die Aktionsleiste bei Bedarf zu verbergen und anzuzeigen. 

Es gibt ein Beispiel auf der folgenden Seite: http://www.techrepublic.com/article/pro-tip-maximize-Android-screen-real-estate-by-showing-und-hiding-the- Aktionsleiste/

3
Muatik

sie könnten diese Bibliothek ausprobieren. Hoffe, es hilft https://github.com/ksoichiro/Android-ObservableScrollView

2
TibiG

Sehen Sie meine Antwort unter diesem Link: Wie kann ich die Android-Aktionsleiste wie in der Google Inbox App ein- und ausblenden? Ich benutze RecyclerView, aber die Idee ist die gleiche

0