web-dev-qa-db-fra.com

Empêcher CollapsingToolbarLayout réduire si non nécessaire

En utilisant:

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'

Avec le projet Cheesesquare mis à jour.

Dans le détail du fromage, je retire 2 cartes (pour n'en avoir qu'une). Existe-t-il un moyen d'empêcher la réduction de la barre d'outils qui affiche un espace vide?

 enter image description here

21
stankocken

Pour implémenter un tel comportement dans Cheesesquare exemple, il suffit de modifier le Android:layout_height paramètre de NestedScrollView en wrap_content.

Et pour empêcher le défilement de CollapsingToolbarLayout, vous devez définir par programmation le paramètre layout_scrollFlags sur la valeur AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP.

Ici décrit comment vous pouvez faire cela.

28
DmitryArc

Vous pouvez utiliser le code ci-dessous pour cela:

   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

En XML, j'ai utilisé la propriété 

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

et suivant dans l'activité

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

Il fonctionne maintenant.

1
Android Boy

Voici mon code de travail, pour d'abord effondrer la barre: 

_appbar.setExpanded (false);

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

voici la mise en page 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>

la référence est: AppBarLayout.setExpanded (boolean)

1
hoogw