web-dev-qa-db-fra.com

Comment activer / désactiver le défilement de la barre d'outils par programmation lors de l'utilisation de la bibliothèque de support de conception

J'utilise la bibliothèque de conception de support pour afficher/masquer la barre d'outils lors du défilement d'un recyclerView à l'intérieur d'un fragment, comme mentionné ici https://github.com/codepath/Android_guides/wiki/Handling-Scrolls-with-CoordinatorLayout

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <Android.support.design.widget.CoordinatorLayout
        Android:id="@+id/coordinatorLayout"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        tools:context=".MainActivity">

        <Android.support.design.widget.AppBarLayout
            Android:id="@+id/appBarLayout"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:theme="@style/AppTheme.AppBarOverlay">

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                Android:background="?attr/colorPrimary"
                app:popupTheme="@style/AppTheme.PopupOverlay"
                app:layout_scrollFlags="scroll|enterAlways"/>

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


        <FrameLayout
            Android:id="@+id/flContent"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

        <Android.support.design.widget.FloatingActionButton
            Android:id="@+id/fab"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="bottom|end"
            Android:layout_margin="@dimen/fab_margin"
            Android:src="@Android:drawable/ic_dialog_email" />

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


    <Android.support.design.widget.NavigationView
        Android:id="@+id/nav_view"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="start"
        Android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</Android.support.v4.widget.DrawerLayout>

Cela fonctionne, maintenant, je veux activer/désactiver le défilement de la barre d'outils par programme car j'utilise des fragments et je dois arrêter cette fonctionnalité pour certains fragments.

34
MHD Shaker

Le Toolbar, étant un enfant du AppBarLayout, obtient son LayoutParams du AppBarLayout. Ces paramètres de mise en page ont les drapeaux de défilement qui sont définis dans le XML.

Ainsi, vous obtenez le AppBarLayout.LayoutParams À partir du Toolbar, et appelez setScrollFlags() pour changer les indicateurs à la valeur souhaitée.

    Toolbar toolbar = findViewById(R.id.toolbar);  // or however you need to do it for your code
    AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
    params.setScrollFlags(0);  // clear all scroll flags
65
kris larson

Retirer app:layout_scrollFlags="scroll|enterAlways" partout où vous souhaitez désactiver le défilement de la barre des tâches.

11
Anuraag Baishya