最近在項目中遇到一個需求,AppBarLayout在完全展開時沒有陰影,在完全收縮時展示陰影,這個功能可以通過設置StateListAnimator的輕松的實現。
首先,在res/animator目錄下建立appbar_elevation.xml文件,如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!--折疊狀態下的陰影--> <item app:state_collapsed="true"> <objectAnimator android:propertyName="elevation" android:valueTo="5dp" android:valueType="floatType" /> </item> <!--展開狀態下的陰影--> <item app:state_collapsed="false"> <objectAnimator android:propertyName="elevation" android:valueTo="0dp" android:valueType="floatType" /> </item> </selector>
然后在布局文件里設置AppBarLayout的stateListAnimator屬性,如下:
<android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="256dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:background="@color/white" android:stateListAnimator="@animator/appbar_elevation" >
目前發現AppBarLayout和CollapsingToolbarLayout結合使用時陰影才有效果