collapsing collapsible collapsemode appbarlayout android material-design android-toolbar android-design-library android-collapsingtoolbarlayout

android - collapsible - layout collapsemode parallax



CollapsingToolbarLayout setTitle() no se actualiza a menos que se haya colapsado (3)

Con la nueva Biblioteca de diseño, se supone que debemos establecer el título de la barra de herramientas en CollapsingToolbarLayout , no la Toolbar sí (al menos cuando se usa la barra de herramientas contraída). Pero setTitle() solo actualiza el título en las siguientes circunstancias específicas:

1) Cuando CollapsingToolbarLayout aún no tiene un título

2) En este momento, CollapsingToolbarLayout se contrae completamente.

3) En este momento, CollapsingToolbarLayout comienza a expandirse.

Lo que realmente estoy tratando de hacer es hacer que el título se convierta en un EditText cuando esté completamente expandido, lo que le permite al usuario darle un nombre a su personaje, que luego se muestra como el título. He intentado forzar el problema llamando a invalidate() o requestLayout() , así como a ambos métodos en los hijos de CollapsingToolbarLayout . Sin efecto.

¿Algunas ideas?


Bueno, tengo una solución mientras esperamos a Google:

  1. Agarra la esencia de https://gist.githubusercontent.com/blipinsk/3f8fb37209de6d3eea99/raw/b13bd20ebb319d94399f0e2a0bedbff4c044356a/ControllableAppBarLayout.java (No soy el creador original, pero los efectos sonoros de la imagen). Esto agrega algunos métodos al AppBarLayout , es decir, expandir y contraer

  2. En su método que llama a setTitle() :

collapsingToolbar.setTitle("All Recent"); getSupportActionBar().setTitle("All Recent"); collapseThenExpand();

  1. Ahora crea un método collapseThenExpand() :

private void collapseThenExpand() { appbar.collapseToolbar(); Handler h = new Handler(); h.postDelayed(new Runnable() { @Override public void run() { appbar.expandToolbar(true); } }, 800); }

Tenga en cuenta que puede desactivar la animación expandida configurándola en falso.


EDITAR: Esta solución ya no es necesaria. error corregido en v22.2.1

No quería simplemente dejar enlaces, así que aquí está la solución completa.

El error se produce porque el código para manejar el título colapsable solo actualiza el título real si el título actual es nulo o el tamaño del texto ha cambiado. La solución es cambiar el tamaño del texto del título y luego volver a cambiarlo. Utilicé 0.5 sp por lo que no hubo demasiado salto. Cambiar el tamaño del texto obliga a que el texto se actualice y no hay parpadeo. sólo un ligero cambio de tamaño de texto.

Esto es lo que tengo

private void setCollapsingToolbarLayoutTitle(String title) { mCollapsingToolbarLayout.setTitle(title); mCollapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBar); mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar); mCollapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBarPlus1); mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBarPlus1); }

en styles.xml tengo

<style name="ExpandedAppBar" parent="@android:style/TextAppearance.Medium"> <item name="android:textSize">28sp</item> <item name="android:textColor">#000</item> <item name="android:textStyle">bold</item> </style> <style name="CollapsedAppBar" parent="@android:style/TextAppearance.Medium"> <item name="android:textSize">24sp</item> <item name="android:textColor">@color/white</item> <item name="android:textStyle">normal</item> </style> <style name="ExpandedAppBarPlus1" parent="@android:style/TextAppearance.Medium"> <item name="android:textSize">28.5sp</item> <item name="android:textColor">#000</item> <item name="android:textStyle">bold</item> </style> <style name="CollapsedAppBarPlus1" parent="@android:style/TextAppearance.Medium"> <item name="android:textSize">24.5sp</item> <item name="android:textColor">@color/white</item> <item name="android:textStyle">normal</item> </style>

Feliz codificacion


En mi solución tuve que establecer el título tanto para la barra de herramientas como para la barra de herramientas que se colapsa para que funcione.

Así que en OnCreate:

toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);

Y luego, más abajo, cuando cambio los fragmentos, establezco el título para ambos cuando se selecciona una pestaña:

public boolean onNavigationItemSelected(@NonNull MenuItem item) { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); //TAB1 - THE DEFAULT TAB switch (item.getItemId()) { case R.id.tab_rooms: toolbar.setTitle("My Title"); collapsingToolbar.setTitle("My Title"); fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); fragment = new RoomsFragment(); transaction.replace(R.id.fragment_container, fragment); transaction.addToBackStack(null); transaction.commit(); return true; case R.id.tab_shisha: toolbar.setTitle("My Title2"); collapsingToolbar.setTitle("My Title2"); fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); fragment = new ShishaFragment(); transaction.replace(R.id.fragment_container, fragment); transaction.addToBackStack(null); transaction.commit(); return true; } return false; }

Espero que ayude a alguien!