Тень

Попробовав новую библиотеку дизайна Android, я обнаружил ошибку с тень панели инструментов. При использовании CollapsingToolbarLayout тень под панелью инструментов появляется только тогда, когда панель инструментов рухнула. Когда мы расширяем его, тень исчезает. Мой макет выглядит так:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:layout_width="match_parent" android:layout_height="@dimen/user_avatar_height" android:fitsSystemWindows="true" android:scaleType="centerCrop" app:layout_collapseMode="parallax" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:gravity="center_vertical" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.CollapsingToolbarLayout> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@color/colorPrimary" android:minHeight="?attr/actionBarSize" app:tabGravity="fill" app:tabIndicatorColor="@android:color/white" app:tabMaxWidth="0dp" app:tabMode="fixed" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

И результаты Введите описание изображения здесь Когда панель инструментов рухнула, появляется тень.

Введите описание изображения здесь

Но при расширении тени исчезают.

Есть ли решения для решения этой проблемы? Может быть, есть способ справиться с появлением / исчезновением тени? Благодарю.

    Обновить

    Похоже, что команда поддержки библиотеки из Google представила поведение как часть 24.0.0, но это было похоже на ошибку, так что теперь есть новое обходное решение, которое вам нужно сделать.

    1 – Создайте appbar_always_elevated.xml в папке animator-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="300dp" android:fitsSystemWindows="true" android:stateListAnimator="@animator/appbar_always_elevated" android:theme="@style/AppTheme.AppBarOverlay"> </android.support.design.widget.AppBarLayout> 

    Старый ответ

    Они исправили это как часть новой версии библиотеки поддержки (24), поэтому вам просто нужно обновить и использовать правильное свойство.

    Просмотрите https://youtu.be/w45y_w4skKs?t=31m52s

    Введите описание изображения здесь


    Старый ответ

    Я решил эту проблему, имея FrameLayout вокруг ViewPager и устанавливая android:foreground .

    Прикрепленное является drawable, которое я использую, и вот ссылка на суть

    Введите описание изображения здесь

    Ответ @ amilcar-andrade помог мне найти правильное решение, так как его ссылка неверна.

    Вы должны применить stateListAnimator к вашему AppBarLayout:

    пример:

     <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="320dp" android:stateListAnimator="@animator/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> 

    Я просто переопределяю код CollapsingToolbarLayout как это

     public class ShadowCollapsingToolbarLayout extends CollapsingToolbarLayout { private AppBarLayout.OnOffsetChangedListener mOnOffsetChangedListener; //constructors @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); ViewParent parent = this.getParent(); if (parent instanceof AppBarLayout) { if (mOnOffsetChangedListener != null) ((AppBarLayout) parent).addOnOffsetChangedListener(mOnOffsetChangedListener); } } public void setOnOffsetChangeListener(AppBarLayout.OnOffsetChangedListener listener) { mOnOffsetChangedListener = listener; } } 

    Используйте его в xml вместо собственного CollapsingToolbarLayout и установите прослушиватель таким образом

     mCollapsingLayout.setOnOffsetChangeListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int i) { ViewCompat.setElevation(appBarLayout, appBarLayout.getTargetElevation()); } }); 

    В моем случае этот код работал для меня!

     <android.support.design.widget.AppBarLayout android:id="@+id/appbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:stateListAnimator="@null" android:elevation="4dp">