2016-03-05 44 views
16

CollapsingToolbarLayout示出了在收缩状态下的影子,但在膨胀时(或扩大处理)阴影dissapearCollapsingToolbarLayout在膨胀状态下从程序兼容性

我的示例代码https://github.com/NaikSoftware/CollapsingToolbarWithImageAndTabs/tree/master/app

布局

<?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_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="ua.naiksoftware.hidetabs.MainActivity"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/toolbar_plus_tabs" 
     app:contentScrim="@android:color/transparent" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed|snap|enterAlways" 
     app:titleEnabled="false" 
     app:toolbarId="@+id/toolbar_wrapper"> 

     <ImageView 
      android:id="@+id/appbar_background" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scaleType="centerCrop" 
      android:src="@drawable/header_back" 
      app:layout_collapseMode="parallax"/> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="top" 
      android:background="@android:color/transparent" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar_wrapper" 
      android:layout_width="match_parent" 
      android:layout_gravity="bottom" 
      android:background="@android:color/transparent" 
      android:layout_height="wrap_content" 
      android:minHeight="@dimen/tab_layout_height"> 

      <android.support.design.widget.TabLayout 
       android:id="@+id/tabs" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@android:color/transparent" 
       app:tabGravity="fill" 
       app:tabIndicatorColor="@android:color/white" 
       app:tabMode="scrollable" 
       app:tabSelectedTextColor="@android:color/white" /> 
     </android.support.v7.widget.Toolbar> 

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

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

<android.support.v4.view.ViewPager 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

<android.support.design.widget.FloatingActionButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/ic_add_black_24dp" 
    android:layout_margin="@dimen/fab_margin" 
    android:tint="@android:color/white" 
    android:layout_gravity="bottom|end" 
    app:elevation="@dimen/fab_elevation" 
    app:layout_behavior="ua.naiksoftware.hidetabs.FabSlidingBehavior"/> 

折叠 Collapsed state

扩展 Expanded state

+0

@Sjd您是否找到解决方案?如果不是,那么回复我将发布解决方案。 –

回答

25

我有同样的问题,并找到了解决办法:

首先,你必须更新到最新的支持库(我使用24.1.0)

然后在stateListAnimator适用于您的AppBarLayout:

例如:

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="320dp" 
    android:stateListAnimator="@drawable/appbar_always_elevated" 
    android:fitsSystemWindows="true"> 

,并使用此XML作为动画师:

<?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> 
+0

太棒了!它也适用于具有'ImageView'的'CollapsingToolbarLayout',谢谢。 – Mohsen

+0

这是否支持所有的api版本? – Moulesh

+0

它的工作原理,但浮动动作按钮与“layout_anchor”参数越来越重叠的appbarlayout – AloDev

12

你可以找到官方对于stateListAnimator AppBarLayout here

将这个appbar_elevation.xml到指定的资源目录animator-v21

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:tools="http://schemas.android.com/tools" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    tools:ignore="PrivateResource"> 
    <item> 
     <objectAnimator 
      android:propertyName="elevation" 
      android:valueTo="@dimen/design_appbar_elevation" 
      android:valueType="floatType" /> 
    </item> 
</selector> 

2. On AppBarLayout set android:stateListAnimator="@animator/appbar_elevation"

+0

更新死链接:https://android.googlesource.com/platform/frameworks/support.git/+/master/design/res/动画师-V21/design_appbar_state_list_animator.xml – dumbfingers