Material3 MaterialToolbar 禁用滚动着色

Ben*_*Tec 1 android material-design android-toolbar material-components-android

我正在将我的应用程序迁移到Theme.Material3.*,发现MaterialToolbar一旦某些内容在其下方滚动,它就会以某种强调色突出显示。请参阅下面我提到的动画:

屏幕录制

但是,我不希望这种效果出现在我的应用程序中。但在阅读MaterialToolbar 文档时,似乎没有办法禁用或修改它,这让我很恼火。我在这里缺少什么?

重现行为的最小 XML 布局(以及使用Material3 主题):

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:liftOnScroll="true">

        <com.google.android.material.appbar.MaterialToolbar
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:titleCentered="true"
            app:title="Welcome"
            app:layout_scrollFlags="noScroll" />

    </com.google.android.material.appbar.AppBarLayout>

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
   
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Lorem ipsum dolor sit amet..." />

    </androidx.core.widget.NestedScrollView>

</androidx.coordinatorlayout.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助。

Ben*_*Tec 6

因此,在玩了一段时间后,我将分享我的发现。

app:liftOnScroll仅当属性设置true为时,背景颜色动画才会在滚动时发生AppBarLayout

<com.google.android.material.appbar.AppBarLayout
        android:id="@+id/primaryAppbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:liftOnScroll="true">

        <com.google.android.material.appbar.MaterialToolbar
            android:id="@+id/primaryToolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize" />

    </com.google.android.material.appbar.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)

设置 后app:liftOnScroll="false",工具栏将永久显示高亮颜色。然后可以通过设置属性来更改它android:background

如果您有一个包含两个 AppBar 的布局,并且您希望两者都在滚动时显示动画,则可以通过调用addLiftOnScrollListener来同步它们,如下所示:

primaryAppbar.addLiftOnScrollListener(new AppBarLayout.LiftOnScrollListener() {
    @Override
    public void onUpdate(float elevation, int backgroundColor) {
        secondaryAppbar.setElevation(elevation);
        secondaryAppbar.setBackgroundColor(backgroundColor);
    }
});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,primaryAppbar是接收滚动事件的那个。