web-dev-qa-db-de.com

Verhindern, dass CollapsingToolbarLayout nicht mehr benötigt wird

Mit:

compile 'com.Android.support:design:23.0.0'
compile 'com.Android.support:appcompat-v7:23.0.0'
compile 'com.Android.support:cardview-v7:23.0.0'
compile 'com.Android.support:recyclerview-v7:23.0.0'

Mit dem Projekt Cheesesquare aktualisiert.

In das Detail des Käses entferne ich 2 Karten (um nur eine zu haben). Gibt es eine Möglichkeit, das Zusammenfallen der Symbolleiste zu verhindern, die eine leere Stelle zeigen?

 enter image description here

21
stankocken

Um ein solches Verhalten in Cheesesquare example zu implementieren, ändern Sie einfach Android:layout_height param der NestedScrollView in wrap_content. Dadurch wird das Blättern nach Inhalt verhindert, wenn er klein genug ist, um auf den Bildschirm zu passen.

Um das Scrollen um CollapsingToolbarLayout zu verhindern, sollten Sie den layout_scrollFlags-Parameter programmgesteuert auf den AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP-Wert setzen.

Hier beschrieben, wie du das machen kannst.

28
DmitryArc

Sie können den folgenden Code dafür verwenden:

   public static void stopScroll() {
    AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) collapsing_toolbar.getLayoutParams();
    toolbarLayoutParams.setScrollFlags(0);
    collapsing_toolbar.setLayoutParams(toolbarLayoutParams);

    CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
    appBarLayoutParams.setBehavior(null);
    appbar.setLayoutParams(appBarLayoutParams);
}

public static void startScroll() {
    AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) collapsing_toolbar.getLayoutParams();
    toolbarLayoutParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
    collapsing_toolbar.setLayoutParams(toolbarLayoutParams);

    CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
    appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
    appbar.setLayoutParams(appBarLayoutParams);
}
1
Vishal Vaishnav

In XML habe ich Eigenschaft verwendet 

app:layout_scrollFlags="snap" in <Android.support.design.widget.CollapsingToolbarLayout 

und in der Aktivität folgen

 toolbar = (Toolbar) findViewById(R.id.toolbar);
 setSupportActionBar(toolbar);
 toolbar.setTitle(null);
 toolbar.setCollapsible(false);

Es funktioniert jetzt.

1
Android Boy

Eine datenbindende Lösung, inspiriert von der Antwort von @ Vishal

<com.google.Android.material.appbar.AppBarLayout
    <com.google.Android.material.appbar.CollapsingToolbarLayout
        app:enableCollapsingScroll="@{listItems.size > 0}"

@BindingAdapter("app:enableCollapsingScroll")
fun setCollapsingToolbarLayoutScrollEnabled(collapsingToolbarLayout: CollapsingToolbarLayout, enabled: Boolean?) {
    val lp = collapsingToolbarLayout.layoutParams as AppBarLayout.LayoutParams
    if (enabled.orFalse()) {
        lp.scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL or AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
    } else {
        lp.scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP
    }
    collapsingToolbarLayout.layoutParams = lp
}
1
li2

Hier ist mein Arbeitscode, um die Leiste zunächst zu verstellen: 

_appbar.setExpanded (false);

   AppBarLayout _appbar = (AppBarLayout) findViewById(R.id.appbar);
    _appbar.setExpanded(false);

hier ist die Layout-XML

 <Android.support.design.widget.AppBarLayout
    Android:id="@+id/appbar"
    Android:layout_width="match_parent"
    Android:layout_height="@dimen/detail_backdrop_height"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    Android:fitsSystemWindows="true">

    <Android.support.design.widget.CollapsingToolbarLayout
        Android:id="@+id/collapsing_toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        Android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginStart="48dp"
        app:expandedTitleMarginEnd="64dp">



        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

            app:layout_collapseMode="pin" />





    </Android.support.design.widget.CollapsingToolbarLayout>

</Android.support.design.widget.AppBarLayout>

die Referenz lautet: AppBarLayout.setExpanded (Boolean)

1
hoogw
  AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) activityUserGroupProfleBinding.collapsingToolbarLayout.getLayoutParams();
        if (logic) {
            params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
        } else {
            params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP);
        }
        activityUserGroupProfleBinding.collapsingToolbarLayout.setLayoutParams(params);
0
Dishant Kawatra