Erstellen Sie benutzerdefinierte AppBarLayout Kind mit minimaler Höhe?

Ich möchte erstellen Sie eine benutzerdefinierte Ansicht, dass ein Kind eine AppBarLayout. Muss ich diese Ansicht teilweise zum Einsturz als ich nach oben scrollen, aber nicht vollständig. Es wird eine minimale Höhe und bleiben fest an der Spitze der AppBarLayout in seiner kleinen Größe, Modus und erweitern Sie dann zurück zu seiner großen Größe-Modus, wenn die Anzeige gescrollt wird wieder nach unten.

Habe ich viel Zeit damit verbracht, auf der Suche durch die Quelle der AppBarLayout und CoordinatorLayout, und so weit ich sehe keine Möglichkeit, das zu tun, was ich will. Es sieht aus wie Kinder AppBarLayout muss entweder sichtbar oder verschwinden ganz, wenn die Ansicht verschoben.

Kann jemand empfehlen, eine Möglichkeit zu schaffen, ein Kind von einem AppBarLayout, dass wird auf diese Weise Verhalten?

Danke

InformationsquelleAutor HansG600 | 2017-01-03



One Reply
  1. 4

    Hier das Rezept:

    Wenn Sie android:minHeight, die AppBarLayout respektiert, dass Wert nicht durch scrollen über das zeigen würde, dass Ihre Komponente kleiner. Also deine XML-layout könnte so etwas wie dieses:

        <com.example.CustomCollapsingLayout
            android:layout_width="match_parent"
            android:layout_height="320dp"
            android:minHeight="108dp"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

    Als Nächstes wollen Sie Ihre Klasse registrieren Sie einen OnOffsetChangedListener mit der übergeordneten AppBarLayout. Ihre Komponenten werden Ereignisse wie die app-Leiste gescrollt werden, so dass Sie wissen, wie man die Ansicht konfigurieren.

    class OnOffsetChangedListener implements AppBarLayout.OnOffsetChangedListener {
    
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
    
                final int scrollRange = appBarLayout.getTotalScrollRange();
                float offsetFactor = (float) (-verticalOffset) / (float) scrollRange;
                ...

    Dieser zeigt, wie Sie finden den gesamten scroll-Bereich und dann finden Sie das Verhältnis zwischen der gesamten scroll-Bereich und die aktuelle scroll-position, d.h. wo die app-Leiste ist in seinen Blättern.

    Sollten Sie tun, was CollapsingToolbarLayout hat; override onAttachedToWindow und fügen Sie den Zuhörer dort:

            //Add an OnOffsetChangedListener if possible
            final ViewParent parent = getParent();
            if (parent instanceof AppBarLayout) {
                if (mOnOffsetChangedListener == null) {
                    mOnOffsetChangedListener = new OnOffsetChangedListener();
                }
                ((AppBarLayout) parent).addOnOffsetChangedListener(mOnOffsetChangedListener);
            }

    Werfen Sie einen Blick auf die source-code für CollapsingToolbarLayout wie es wird Ihnen ein paar Ideen. Ihrer Ansicht muss eine Menge tun, um die gleichen Dinge.

    Können Sie auch sehen an meinem Beispiel-Projekt, das ein Bild skaliert und verschiebt die Symbolleiste wie ein Bildlauf durchgeführt wird: https://github.com/klarson2/Collapsing-Image

    • Das funktioniert, danke. Ich hatte Lesen über exitUntilCollapsed, aber es falsch verstanden.
    • Sie sind ein Retter.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.