0

我在AppBarLayout上获取阴影时遇到问题。以下是我的活动的XML布局,任何人都可以看到问题出在哪里?我查了这里几个非常类似的问题,一切都应该正确设置...无法在AppBarLayout/CollapsingToolbar上获得阴影

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    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/main_root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context=".ui.main.MainActivity" 

    > 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/main_app_bar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fitsSystemWindows="true" 
     app:elevation="15dp" 
     > 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/main_collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" 
      app:collapsedTitleTextAppearance="@style/Base.Widget.AppCompat.Toolbar" 
      app:expandedTitleTextAppearance="@style/Base.Widget.AppCompat.Toolbar" 
      app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      > 

      <android.support.percent.PercentRelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       app:layout_collapseMode="parallax" 
       > 

       ... Content ... 

      </android.support.percent.PercentRelativeLayout> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/main_toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_collapseMode="pin" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

      </android.support.v7.widget.Toolbar> 

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

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

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/main_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginEnd="1dp" 
     android:layout_marginRight="1dp" 
     android:paddingBottom="@dimen/main_recycler_bottom_padding" 
     android:clipToPadding="false" 
     android:overScrollMode="never" 
     android:layout_below="@+id/app_bar_layout" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/attribute_add" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:layout_marginBottom="@dimen/default_padding" 
     app:borderWidth="0dp" 
     android:backgroundTint="@color/colorPrimary" 
     android:src="@drawable/ic_add_white"/> 

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

此外,还有的是Android系统报警应用一个小功能,他们增加阴影工具栏仅在活动的内容滚动下来,任何人都有任何指示,应该如何实现这样的事情?

+0

阴影效果的棒棒糖预设备不支持。 –

+0

我正在开发Android 7.1.2 – TheJudge

回答

4

的执行工作已经略有改变,让阴影在AppBarLayout,利用这一点,

第1步:

定义状态列表动画,并把它在动画-V21文件夹res文件夹。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item> 
     <objectAnimator android:propertyName="elevation" 
         android:valueTo="8dp" 
         android:valueType="floatType" 
         android:duration="1"/> 
    </item> 

</selector> 

第2步:

现在添加状态列表动画在AppBarLayout,这样,

<android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/toolbar_height" 
     android:stateListAnimator="@animator/appbar_always_elevated" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

</android.support.design.widget.AppBarLayout> 
+0

感谢您的回答,我真的只想在CollapsingToolbar被折叠并且只有经典的'Toolbar'位于顶部时才需要阴影,所以我添加了'stateListAnimator'属性到'Toolbar'而不是'AppBarLayout'。你能给出任何额外的信息,为什么通过动画设置的高程? – TheJudge

+1

我们现在必须使用状态列表动画器,因为阴影需要根据AppBarLayout的高度进行更改。当AppBarLayout被完全扩展时,阴影变得不可见,但是当阴影崩溃并且占据正常工具栏的大小时,阴影会再次设置为满。 –

+0

是的,那正是我想要的。然而,你的实现在AppBarLayout上留下了阴影,即使它被展开了,难道是因为ObjectAnimator的一些属性? – TheJudge