studio layout_collapsemode layout_behavior example coordinatorlayout coordinator constraintlayout appbarlayout and android android-layout coordinator-layout

layout_collapsemode - layout_behavior android studio



CoordinatorLayout y AppBarLayout alzado (2)

He creado un diseño de AppBar como este

<android.support.design.widget.AppBarLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/appbar_layout" android:layout_height="@dimen/app_bar_height" android:layout_width="match_parent" android:fitsSystemWindows="true" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:elevation="20dp"> <android.support.design.widget.CollapsingToolbarLayout...> </android.support.design.widget.AppBarLayout>

funciona y proyecta una sombra en LinearLayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/app_bar_large" /> </LinearLayout>

Sin embargo, cuando lo puse en la sombra CoordinatorLayout se ha ido:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/app_bar_large" /> </android.support.design.widget.CoordinatorLayout>

¿Cómo puedo hacer que appbar muestre su sombra de nuevo?


Este es en realidad un detalle de implementación de CollapsingToolbarLayout , como se ve en el código fuente :

if (Math.abs(verticalOffset) == scrollRange) { // If we have some pinned children, and we''re offset to only show those views, // we want to be elevate ViewCompat.setElevation(layout, layout.getTargetElevation()); } else { // Otherwise, we''re inline with the content ViewCompat.setElevation(layout, 0f); }

Lo que elimina la elevación cuando CollapsingToolbarLayout muestra elementos no fijados: de forma predeterminada, solo tendrá una elevación cuando solo estén visibles los elementos anclados.


la razón es arriba, intenta esto para resolver:

appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { //some other code here ViewCompat.setElevation(appBarLayout, The Elevation In Px); } });