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í:
- TextInputLayout enfoque automático
- WebView en CoordinatorLayout con CollapsingToolbarLayout
- TabLayout estilo de pestaña
- Android TextInputField Error de inflador
- TabLayout pestaña de selección
<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?
- Establecer menú predeterminado para BottomNavigationView
- Mostrar programaticamente la barra de herramientas después de ocultarlo mediante desplazamiento (Android Design Library)
- Cómo implementar la pestaña de navegación inferior según la nueva guía de Google
- AppBarLayout cambiar compensación mediante programación
- Cómo cambiar el diseño de android biblioteca de soporte FAB Button color de la frontera?
- Estilizar texto en TabLayout
- (Design Support Library) Elementos de la barra de herramientas detrás de la barra de estado
- Pantalla inferior de pantalla completa con el botón Cerrar (X) en la parte superior
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.
- ServiceConnection :: onServiceConnected no se llama aunque Context :: bindService devuelve true?
- ¿Puede la notificación FCM sobre Android sobreescribir anterior?