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 System, они добавив тень на панели инструментов только тогда, когда содержание деятельности прокручивается вниз, у кого есть какие-то указатели на то, как это должно быть достигнуто?

+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» рухнул, и только классическая панель инструментов находится наверху, поэтому я добавил свойство stateListAnimator' в 'Toolbar' не 'AppBarLayout'. Можете ли вы дать дополнительную информацию о том, почему высота устанавливается через аниматор? – TheJudge

+1

Теперь нам нужно использовать аниматор списка состояний, потому что тень должна изменяться в зависимости от высоты AppBarLayout. Когда AppBarLayout полностью расширен, тень становится невидимой, но тень снова становится полной, когда она сворачивается, и принимает размер обычной панели инструментов. –

+0

Да, это именно то, что я хотел. Однако ваша реализация оставила тень на «AppBarLayout», даже когда она была расширена, может быть, из-за некоторых свойств «ObjectAnimator»? – TheJudge

Смежные вопросы