viewpager tablayout tab support studio how color change bar android android-viewpager android-5.0-lollipop android-support-design android-statusbar

android - tablayout - El relleno de la barra de estado de CoordinatorLayout desaparece de la página 2 de ViewPager



tab layout android studio (4)

Como sidecarcat, me encontré con un problema similar (usando v23.1.1). Publico aquí una solución alternativa utilizando el código de sidecarcat y agrego un código para eliminar el relleno superfluido en algunos casos.

// in onCreateView: adjust toolbar padding final int initialToolbarHeight = mToolbar.getLayoutParams().height; final int initialStatusBarHeight = getStatusBarHeight(); mToolbar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int[] locToolbar = new int[2]; mToolbar.getLocationOnScreen(locToolbar); int yToolbar = locToolbar[1]; int topPaddingToolbar = mToolbar.getPaddingTop(); if (isAdded()) { //normal case : system status bar padding on toolbar : yToolbar = initialStatusBarHeight && topPaddingToolbar = 0 //abnormal case : no system status bar padding on toolbar -> toolbar behind status bar => add custom padding if (yToolbar != initialStatusBarHeight && topPaddingToolbar == 0) { mToolbar.setPadding(0, initialStatusBarHeight, 0, 0); mToolbar.getLayoutParams().height = initialToolbarHeight + initialStatusBarHeight; } //abnormal case : system status bar padding and custom padding on toolbar -> toolbar with padding too large => remove custom padding else if (yToolbar == initialStatusBarHeight && topPaddingToolbar == initialStatusBarHeight) { mToolbar.setPadding(0, 0, 0, 0); mToolbar.getLayoutParams().height = initialToolbarHeight; } } } }); return mRootView; } public int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; }

EDICIÓN del 01/02/2016: El error debe resolverse aplicando el código proporcionado por el Equipo de Android: https://stackoverflow.com/a/35132144/3397345

EDIT de 27/01/2016: Error aún no resuelto en v23.1.1. Las soluciones proporcionadas hasta ahora no proporcionan una barra de estado transparente (que es el propósito de este diseño) o son demasiado complejas. Un nuevo registro de pantalla del error disponible aquí: https://www.youtube.com/watch?v=76IxhlUx8MQ

EDITAR del 23/07/2015: Support Design Library v22.2.1 no solucionó :-( ¡También esto sucede en el retorno rápido de la barra de herramientas en MainActivity!

EDITAR del 28/07/2015: Pregunta vinculada: el relleno de la barra de estado de CoordinatorLayout desaparece durante las transacciones de fragmentos

Desde el repositorio de ejemplo https://github.com/chrisbanes/cheesesquare he implementado ViewPager en la actividad de detalles. Funciona, pero la Barra de estado desaparece de la segunda página como se ve en la imagen solo en dispositivos Lollipop , ¿Alguna idea? Yo uso android:fitsSystemWindows="true" pero funciona solo en la primera página :-(

activity_detail_viewpager.xml si pongo aquí fitsSystemWindows, StatusBar ya no es transparente, pero funciona (el relleno de la barra de estado no se pierde). ¡Pero me gustaría que fuera transparente!

<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.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" android:overScrollMode="ifContentScrolls"/> </android.support.design.widget.CoordinatorLayout>

activity_detail_fragment.xml

<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:layout_width="match_parent" android:layout_height="@dimen/detail_backdrop_height" 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:layout_scrollFlags="scroll|exitUntilCollapsed" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="64dp"> <ImageView android:id="@+id/back_item" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:fitsSystemWindows="true" app:layout_collapseMode="parallax" /> <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> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingTop="24dp"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/card_margin"> ... </android.support.v7.widget.CardView> ... </LinearLayout> </android.support.v4.widget.NestedScrollView> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_margin="@dimen/fab_margin" android:clickable="true" android:src="@drawable/ic_discuss" app:layout_anchor="@id/appbar" app:layout_anchorGravity="bottom|end" app:borderWidth="0dp"/> </android.support.design.widget.CoordinatorLayout>

style.xml v21

<resources> <style name="AppTheme" parent="AppTheme.Base"> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item> </style> </resources>


Me encontré con un problema similar (usando v23.0.1). En mi caso, el problema ocurre también en la primera página. La solución que decidí fue ajustar el relleno y la altura de la barra de herramientas cuando se crea el fragmento.

// in onCreateView: adjust toolbar padding Toolbar toolbar = (Toolbar) mRootView.findViewById(R.id.toolbar); toolbar.setPadding(0, getStatusBarHeight(), 0, 0); toolbar.getLayoutParams().height = toolbar.getLayoutParams().height + getStatusBarHeight(); return mRootView; } public int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; }


Parece que la solución para esto es simple.

Tienes

android:fitsSystemWindows="true"

En el fragmento CoordinateLayoutView

elimínelo de aquí y colóquelo en la vista raíz de la Actividad.

Esto debería funcionar ahora.


Solución propuesta por el equipo de Android en la respuesta de mi defecto reportado. Este código finalmente debería funcionar.

ViewPager mViewPager; ViewCompat.setOnApplyWindowInsetsListener(mViewPager, new OnApplyWindowInsetsListener() { @Override public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { insets = ViewCompat.onApplyWindowInsets(v, insets); if (insets.isConsumed()) { return insets; } boolean consumed = false; for (int i = 0, count = mViewPager.getChildCount(); i < count; i++) { ViewCompat.dispatchApplyWindowInsets(mViewPager.getChildAt(i), insets); if (insets.isConsumed()) { consumed = true; } } return consumed ? insets.consumeSystemWindowInsets() : insets; } });