Hoja de fondo se aleja con cambio de visibilidad
Tengo una hoja inferior con un NestedScrollView dentro (ver abajo). Cuando presiono un botón FAB, quiero hacer que algunas partes de este NestedScrollView sean invisibles. Pero cuando cambio algunas visiones de linearlayouts a GONE, la hoja de fondo vuela aways de la tapa. Mira aquí:
- RecyclerView (horizontal) anidados en BottomSheet que impide el desplazamiento vertical
- Persistente hoja inferior con vista recicladora
- Hoja inferior de Android - tema de desplazamiento
- ¿Cómo manejar los problemas de la nueva hoja inferior de la biblioteca de soporte / diseño?
- ListView en la hoja inferior
Puede obtener el código completo en https://github.com/Tanrikut/BottomSheetExample
Mi método de visibilidad del cambio:
private void changeVisibility() { subtitleLayout.setVisibility(View.GONE); coordinateLayout.setVisibility(View.GONE); timeLayout.setVisibility(View.GONE); }
Mi NestedScrollView xml:
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView 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:layout_width="match_parent" android:layout_height="wrap_content" app:behavior_peekHeight="120dp" app:layout_behavior="android.support.design.widget.BottomSheetBehavior" android:id="@+id/bottom_sheet_main"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="28dp" android:background="@android:color/white" android:animateLayoutChanges="true" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="10dp" android:paddingStart="10dp" android:paddingTop="@dimen/activity_horizontal_margin"> <TextView style="@style/TextAppearance.AppCompat.Headline" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Dandelion Chocolate" android:id="@+id/title" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/activity_horizontal_margin" android:layout_marginTop="16dp" android:orientation="horizontal" android:id="@+id/subtitleLayout"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/subtitle" android:text="Subtitle" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="@dimen/activity_horizontal_margin" android:id="@+id/coordinateLayout"> <ImageButton android:layout_width="24dp" android:layout_height="24dp" android:alpha="0.36" android:src="@drawable/ic_room_24dp" android:background="@null" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/activity_horizontal_margin" android:layout_marginStart="@dimen/activity_horizontal_margin" android:text="740, Valencia St, San Francisco, CA" android:textColor="@android:color/primary_text_light" android:id="@+id/bottom_sheet_coordinate" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="@dimen/activity_horizontal_margin" android:id="@+id/timeLayout"> <ImageButton android:layout_width="24dp" android:layout_height="24dp" android:alpha="0.36" android:src="@drawable/ic_query_builder_24dp" android:background="@null" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/activity_horizontal_margin" android:layout_marginStart="@dimen/activity_horizontal_margin" android:text="Wed, 10 AM - 9 PM" android:textColor="@android:color/primary_text_light" android:id="@+id/bottom_sheet_time" /> </LinearLayout> </LinearLayout> </FrameLayout> </android.support.v4.widget.NestedScrollView>
- La Biblioteca de Soporte de Diseño de Android 24.2.1 hace que BottomSheet se abra al inicio
- Android BottomSheetDialogFragment no se expande por completo
- Personalización de la hoja inferior persistente STATE_EXPANDED altura o desplazamiento
- Scrollview no se desplaza en la hoja de cálculo de Android
- BottomSheetDialog permanece oculto después de descartar arrastrando hacia abajo
- BottomSheet con ViewPager y fragmentos?
- Actualizar los contenidos de recyclerview fallan en la hoja inferior
- BottomNavigationView no es de ancho completo
Me encontré con esto, tomó un tiempo para averiguar cuál era la causa.
Es porque estás usando android: animateLayoutChanges, que hace surgir un error en BottomSheetBehavior o CoordinatorLayout.
Eliminar y la hoja de fondo dejará de animar por sí solo cuando no debería. No es una solución, sino una solución al menos.
–
Actualizar:
Resulta que si habilitas "animateLayoutChanges" programáticamente configurando la instancia de LayoutTransition para usar, puedes establecer una bandera en ella que evitará que se ensucie con las vistas que son los antepasados de la que estás usando android: animateLayoutChanges on (aka: Su contenedor BottomSheet):
LayoutTransition transition = new LayoutTransition(); transition.setAnimateParentHierarchy(false); yourLinearLayoutThatNeedsLayoutAnimation.setLayoutTransition(transition);
¡Puede ser esto puede ayudarle! No puedo comentarlo publicándolo como una respuesta
aquí
Para la disposición de la diapositiva algo igual que la hoja inferior pero bueno
BottomSheetBehavior
tiene su propio comportamiento por el cual puede obtener el resultado respectivo. A continuación se muestra el comportamiento de la plantilla.
STATE_DRAGGING
, STATE_SETTLING
, STATE_EXPANDED
, STATE_COLLAPSED
, STATE_HIDDEN
.
No utilice la visibilidad de ningún diseño.
Utilice este comportamiento en su código como:
fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int behaviorState = bottomSheetBehavior.getState(); if (behaviorState == BottomSheetBehavior.STATE_EXPANDED) { bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } else { bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); } } });
- ¿Cómo puedo recortar mi código?
- ACCESS_FINE_LOCATION se concede en el manifiesto, pero siempre obtiene el permiso denegado?