2015-09-09 1 views
6

Пытаясь новой библиотеки дизайна 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" /> 

И результаты enter image description here Существует тень, когда рухнул панель инструментов.

enter image description here

Но когда развернуть его теневые исчезают.

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

+0

Это не может быть ошибка - возможно это означало бы делать поведение под «проделать описанное Гибкое пространство с перекрывающиеся» в нижней части этой страницы: https://www.google.com/design /spec/patterns/scrolling-techniques.html#scrolling-techniques-scrolling – JoeyJubb

+0

Вы нашли решение? Я думаю, что поведение предназначено, но это кажется большой проблемой, если вы хотите, чтобы тень даже при расширении. Я попытался прослушать изменения смещения AppBarLayout и вручную установить тень, а также обернуть AppBarLayout в RelativeLayout и вручную поместить тень ниже, но ничего не работает, как я хочу ... – Thoast83

+0

@ Thoast83 Опубликуйте ответ ниже. –

ответ

0

Я просто переопределить 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()); 
      } 
     }); 
3

Update

Похоже, что поддержка библиотечная команда от 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

enter image description here


Старый ответ

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

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

enter image description here

1

Ответ @ Amílcar-Андраде помог мне найти правильное решение, поскольку его связь не является правильной ,

Вы должны применить 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> 
0

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

<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"> 

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

  • Нет связанных вопросов^_^