web-dev-qa-db-de.com

Aktivieren / Deaktivieren des programmgesteuerten Bildlaufs in der Symbolleiste bei Verwendung der Design-Support-Bibliothek

Ich verwende die Support-Design-Bibliothek, um die Symbolleiste beim Scrollen einer recyclerView in einem Fragment ein-/auszublenden, wie hier erwähnt . 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>

Es funktioniert reibungslos. Jetzt möchte ich das Scrollen in der Symbolleiste programmgesteuert aktivieren/deaktivieren, da ich Fragmente verwende und diese Funktion für einige Fragmente beenden muss.

34
MHD Shaker

Das Toolbar, das ein Kind des AppBarLayout ist, erhält sein LayoutParams aus dem AppBarLayout. Diese Layoutparameter haben die Scroll-Flags, die im XML gesetzt sind.

Sie erhalten also den AppBarLayout.LayoutParams Von Toolbar und rufen setScrollFlags() auf, um die Flags auf den gewünschten Wert zu ändern.

    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

Entfernen app:layout_scrollFlags="scroll|enterAlways" überall dort, wo Sie das Scrollen in der Taskleiste deaktivieren möchten.

11
Anuraag Baishya