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