layout_scrollflags layout_collapsemode example coordinatorlayout collapsing appbarlayout animations android android-actionbar statusbar android-collapsingtoolbarlayout android-coordinatorlayout

android - layout_collapsemode - Uso de windowTranslucentStatus con CollapsingToolbarLayout



coordinatorlayout animations (7)

Agregue fitSystemWindows al diseño y establezca en verdadero.

Actualizar

Lo siento por mi respuesta incompleta. Debería agregar fitsSystemWindows = "true" al diseño xml como los códigos a continuación.

<android.support.design.widget.CoordinatorLayout android:id="@+id/main" 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.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <android.support.design.widget.AppBarLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:background="@color/background_material_dark" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsingToolbarLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:minHeight="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed" app:statusBarScrim="#09b" app:contentScrim="#09f" android:fitsSystemWindows="true"> <ImageView android:id="@+id/img" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/location_banner" app:layout_collapseMode="parallax" app:layout_collapseParallaxMultiplier="0.7" android:fitsSystemWindows="true"/> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_height="?attr/actionBarSize" android:layout_width="match_parent" app:layout_collapseMode="pin" android:fitsSystemWindows="true" app:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout>

Estoy tratando de obtener un efecto similar al que se ve en Google Play.

Tengo el siguiente diseño para mostrar una barra de herramientas transparente con una imagen detrás. Cuando el usuario se desplaza, hay un efecto de paralaje en la vista de imagen a medida que se desplaza fuera de la pantalla. La barra de herramientas regresa cada vez que el usuario se desplaza hacia arriba, y la vista de imagen solo regresa cuando el usuario llega al límite de la lista.

Todo esto funciona muy bien.

<android.support.design.widget.CoordinatorLayout android:id="@+id/main" 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.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <android.support.design.widget.AppBarLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:background="@color/background_material_dark"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsingToolbarLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:minHeight="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed" app:statusBarScrim="#09b" app:contentScrim="#09f"> <ImageView android:id="@+id/img" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/location_banner" app:layout_collapseMode="parallax" app:layout_collapseParallaxMultiplier="0.7" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_height="?attr/actionBarSize" android:layout_width="match_parent" app:layout_collapseMode="pin" android:fitsSystemWindows="true" app:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout>

La cuestión

Cuando establezco windowTranslucentStatus en true. El contenido de la vista sube hasta debajo de la barra de estado, pero el contenido de CollapsingToolbarLayout sube dos veces la altura de la barra de estado (CollapsingToolbarLayout conserva la altura correcta).

Esto significa que parte de la parte superior de la imagen se corta y la barra de acción ahora aparece debajo de la barra de estado en lugar de debajo de ella. Como un efecto secundario de esto, ahora hay relleno en la parte inferior de CollapsingToolbarLayout de la misma altura que la barra de estado

Esto es lo que parece sin windowTranslucentStatus. Todo aqui funciona bien

windowTranslucentStatus establecido en true

Usuario desplazándose hacia arriba desde abajo en la lista (no en la parte superior)


Ahora ha habido una actualización de la biblioteca de diseño. Supongo que el problema publicado anteriormente fue un error.

Si actualiza la biblioteca de diseño a la última versión, este problema ya no ocurre.

Ahora he quitado todos los ajustes fitSystemWindows = "true" excepto el ImageView (ya que debe mostrarse debajo de la barra de estado).

También he eliminado el relleno negativo de la barra de herramientas.

Este es mi tema para mayores de 21 años.

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowActionBarOverlay">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:textColorPrimary">@android:color/white</item> </style>

Todo funciona como se espera ahora.


Extienda el CoordinatorLayout y llame a setOnApplyWindowInsetsListener en su constructor para restablecer los valores de inserción. Aquí está el código:

public class CustomCoordinatorLayout extends CoordinatorLayout { public CustomCoordinatorLayout(Context context) { super(context); init(); } public CustomCoordinatorLayout(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CustomCoordinatorLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { setOnApplyWindowInsetsListener(new OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) { WindowInsets replaced = windowInsets.replaceSystemWindowInsets(0, 0, 0, 0); return replaced; } }); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }


La mejor manera de lograrlo es como dijo Stimsoni.

Agregue android: fitsSystemWindows = "true" a CoordiatorLayout, AppBarLayout e ImageView

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/appBar" android:fitsSystemWindows="true" android:layout_width="match_parent" android:layout_height="wrap_content" 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="wrap_content" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"> <ImageView android:id="@+id/background" android:layout_width="match_parent" android:layout_height="256dp" android:scaleType="centerCrop" android:fitsSystemWindows="true" app:layout_collapseMode="parallax" android:alpha="0.75" android:src="@drawable/foo"/> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_collapseMode="pin"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout>...


Solo cambia el color de la barra de estado en Styles.XML (v21)

<item name="android:statusBarColor">@android:color/transparent</item>

o eliminar la línea anterior en ese XML funciona perfecto.


Tengo el mismo problema, pero hay una cosa que sé.

Si tiene que tener una barra de estado transparente en una barra de herramientas normal, debe agregar una tapa de relleno de 16 pd.


Una vez que la barra de estado es transparente y la actividad la puede utilizar libremente, la barra de herramientas se empuja hacia arriba para ocupar ese espacio. Para solucionar este problema, debe mover manualmente la barra de herramientas al lugar original.

Agregue las siguientes etiquetas a la vista "android.support.v7.Widget.Toolbar":

android:layout_height="48dp" // Whatever the height of the toolbar you want android:layout_marginTop="-48dp" // Negative of the height of the toolbar