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