AppBarLayout 上的 EdgeEffect

Posted

技术标签:

【中文标题】AppBarLayout 上的 EdgeEffect【英文标题】:EdgeEffect on AppBarLayout 【发布时间】:2016-05-28 17:32:36 【问题描述】:

我的视图中有一个 CollapsingToolbar 作为父元素,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/XmatchYmatch"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:layout_
        android:layout_
        android:fitsSystemWindows="true"
        android:transitionName="@string/shared_element_anim_name"
        android:background="@color/red">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            style="@style/XmatchYmatch"
            android:minHeight="0dp"
            app:statusBarScrim="@color/translucent_black"
            app:expandedTitleTextAppearance="@android:color/transparent"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed">

            <RelativeLayout
                android:id="@+id/toolbar_content_parent"
                style="@style/XmatchYmatch"
                android:fitsSystemWindows="true"
                app:layout_collapseMode="parallax"
                app:layout_scrollFlags="scroll|exitUntilCollapsed">

                <ImageView
                    android:id="@+id/toolbar_iv"
                    style="@style/XmatchYmatch"
                    android:scaleType="centerCrop"
                    tools:ignore="ContentDescription"/>

                <TextView
                    android:id="@+id/toolbar_title"
                    style="@style/ImageText.Title"
                    android:layout_alignParentBottom="true"
                    android:maxLines="2"/>

                <TextView
                    android:id="@+id/toolbar_dm"
                    style="@style/ImageText.Subtitle"
                    android:layout_above="@id/toolbar_title"
                    android:maxLines="2"/>
            </RelativeLayout>

            <include
                android:id="@+id/toolbar"
                layout="@layout/toolbar"/>

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        style="@style/XmatchYmatch">

    <LinearLayout
        android:id="@+id/section_parent"
        style="@style/XmatchYmatch.Vert"
        android:animateLayoutChanges="true"/>
</android.support.v4.widget.NestedScrollView>

    <FrameLayout
        style="@style/XmatchYwrap"
        android:background="@color/dark_red"
        app:layout_anchor="@id/detail_fragment"
        app:layout_anchorGravity="bottom|right|end">

        <Button
            android:id="@+id/button"
            style="@style/Subhead"
            android:layout_
            android:background="?android:attr/selectableItemBackground"
            android:text="@string/button_text"
            android:textColor="@android:color/white"/>

        <ProgressBar
            android:id="@+id/sign_progress"
            style="@style/ProgressBar"
            android:layout_gravity="center"
            android:visibility="gone"/>
    </FrameLayout>

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

当我一直滚动到顶部时,Toolbar 下方有边缘效果。像这样:

但我希望边缘效果低于StatusBar。像这样:

我该怎么做呢?

编辑:我尝试将NestedScrollView 设为我的父母并且它有效。但这不是我想要的层次结构。

【问题讨论】:

试试这个: public void applyKitKatTranslucency(int color) if (Utils.hasKitKat()) if (mTintManager == null) mTintManager = new SystemBarTintManager(this); mTintManager.setStatusBarTintEnabled(true); mTintManager.setStatusBarTintColor(color); getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color)); 您能详细说明边缘效应是什么意思吗?我不知道你的意思。 :) @jmols 当您在 RecyclerView 或 NestedScrollView 上滚动时,您会看到我发布的图片中的效果(第一张图片中的红色下方),而在第二张图片中很难看到pic,状态栏下方的灰色效果。 【参考方案1】:

您可以尝试通过添加以下行来更改 AppTheme 中边缘效果的颜色

&lt;item name="android:colorEdgeEffect"&gt;@color/my_color&lt;/item&gt;

希望这会有所帮助。

【讨论】:

这不是问题要问的。我希望 EdgeEffect 发生在 StatusBar 下方,而不是 AppBarLayout 发生在我身上。

以上是关于AppBarLayout 上的 EdgeEffect的主要内容,如果未能解决你的问题,请参考以下文章

使用 RecyclerView + AppBarLayout

android 新控件 AppBarLayout 使用

将 appbarLayout 放在屏幕底部

AppBarLayout 并不总是在向下滚动时重新输入

Android appbarlayout 高程出现在状态栏中

检测 AppBarLayout/CollapsingToolbarLayout 何时完全展开