Hoja de fondo de Android La altura de TextView no se ajusta al expandirse por primera vez

TL; DR: TextView en TextView de fondo no muestra texto multilínea envuelto la primera vez que la Bottomsheet se amplía, sino que se ajusta después de que se contrae.

Así que estoy usando la design-23.2.1 biblioteca design-23.2.1 .

Mi archivo de diseño se ve así:

 <android.support.design.widget.CoordinatorLayout> ...... <LinearLayout android:id="@+id/bottom_sheet" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" app:behavior_peekHeight="@dimen/bottom_sheet_peek_height" app:layout_behavior="android.support.design.widget.BottomSheetBehavior"/> </android.support.design.widget.CoordinatorLayout> 

El contenido de la Bottomsheet de Bottomsheet es básicamente una lista:

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="false" /> ... </LinearLayout> 

El problema es cuando la Bottomsheet se establece en STATE_EXPANDED la primera vez , el TextView es una sola línea y el texto se envuelve, y no hay puntos suspensivos en el final de línea.

Luego, después de que se establezca en STATE_COLLAPSED , la altura de TextView está bien y multi-alineada correctamente.

Sé que la re-disposición de la altura ocurrió después de fijar a STATE_COLLAPSED porque la STATE_COLLAPSED del colapso y la línea múltiple está ya allí.

Un trabajo alrededor se proporciona aquí . Lo seguí y añadí esto:

 bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { if (newState == BottomSheetBehavior.STATE_EXPANDED) { bottomSheetBehavior.onLayoutChild(coordinatorLayout, bottomSheetView, ViewCompat.LAYOUT_DIRECTION_LTR); } } ........ } 

Realmente hizo que la altura se reajuste cuando Bottomsheet se expande la primera vez. Sin embargo, se produjo abruptamente justo después de la animación en expansión se hace.

¿Hay alguna manera de ajustar la altura antes de la animación en expansión como lo hace Google Map?

Actualizar

He encontrado que este problema es porque he establecido STATE_COLLAPSED a STATE_COLLAPSED antes de que se amplió. Si eso no fue fijado entonces el problema se ha ido y la altura se ajusta correctamente la primera vez.

Ahora mi pregunta es: ¿por qué establecerlo en STATE_COLLAPSED antes de expandir causará ese problema?

Si por alguna razón todavía tiene que usar la biblioteca de soporte antiguo, aquí está la solución para esto.

 mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull final View bottomSheet, int newState) { bottomSheet.post(new Runnable() { @Override public void run() { //workaround for the bottomsheet bug bottomSheet.requestLayout(); bottomSheet.invalidate(); } }); } @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { } }); 

Después de cambiar a la biblioteca de diseño 24.0.0, el problema ya no se puede reproducir.

Gracias por los esfuerzos del equipo de Android para hacer nuestra vida más fácil y más fácil.

  • Cómo deshabilitar el enfoque inmediato en TextInputLayout?
  • CollapsingToolbarLayout y TabLayout
  • Biblioteca de soporte de diseño de Android: Utilice ViewPager / TabLayout con barra de desplazamiento y botón pegajoso
  • Cómo utilizar SwipeDismissBehavior.OnDismissListener en RecyclerView
  • Fragmento sin desplazamiento en un ViewPager dentro de CoordinatorLayout
  • Problema anidado de RecyclerView con AppBarLayout
  • Diseño Android de Android TabLayout
  • NestedScrollview superpuesta CollapsingToolbarLayout como aplicación gmusic
  • SnackBar y fitsSystemWindow
  • Vistas arriba y abajo de RecyclerView
  • Cómo ocultar FAB cuando el teclado está abierto.
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.