with tutorial example ejemplo coordinator collapsing appbarlayout android android-architecture-components architecture-components android-jetpack android-architecture-navigation

tutorial - coordinator layout in android example



Componente de la arquitectura de navegaciĆ³n-Vista detallada con CollapsingToolbar (2)

Supongamos que tenemos

  1. Una actividad para una aplicación
  2. La actividad contiene la barra de herramientas y la barra de navegación inferior

Todas las apariencias posibles para la barra de herramientas que necesita para su aplicación deben implementarse en esa única barra de herramientas y el fragmento actualmente activo puede controlarse. Para no violar el principio de inversión de dependencia, todos los fragmentos que necesitan una función de la barra de herramientas de la actividad deben implementar una interfaz. Puede utilizar OnBackStackChangedListener para buscar actualizaciones de la vista

getFragmentManager().addOnBackStackChangedListener( new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { Fragment visibleFragment = ... if(visibleFragment instanceof ToolbarControlFragment) { if(visibleFragment.shouldExpandToolbar()) { // set AppBarLayout expanded state } // ... } } } );

Quizás recuerdes ese principio cuando un Fragmento requiere un Menú de Opciones.

En general, recomendaría tener solo una Barra de navegación inferior controlada por una actividad y varias Barras de herramientas en Fragmentos. Esto reduce la complejidad y hace que los componentes de la aplicación sean más independientes.

La práctica propuesta para los nuevos componentes de navegación se presentó en I / O con la siguiente plantilla y filosofía propuesta:

  1. Una actividad para una aplicación
  2. La actividad contiene la barra de herramientas y la barra de navegación inferior

Una aplicación típica a menudo tiene una vista detallada con una barra de herramientas Collapsing en ella. ¿Cómo se construiría eso bajo esa arquitectura?

  • ¿Mover la barra de herramientas a cada fragmento XML?
  • ¿Implementar la barra de herramientas colapsada programáticamente?
  • ¿Mueve el fragmento de detalle a su propia actividad (puede usar su propio vínculo de todos modos) y "romper" la filosofía?

tratar

appBarLayout = (AppBarLayout) findViewById(R.id.appbar); if(expandToolbar){ appBarLayout.setExpanded(true,true); }else{ appBarLayout.setExpanded(false,true); }

Aquí hay una inhabilitación del enlace de usufal expandir en CollapsingToolbarLayout para ciertos fragmentos

También para otras personas que deseen cambiar algunas partes de su barra de herramientas, debe escribir la vista de la barra de herramientas personalizada en un XML separado e intentar inflar la vista personalizada en sus detalles. Fragmentar gramaticalmente luego ocultar los elementos no utilizados de la barra de herramientas antigua, si los hay.

setSupportActionBar(toolbar); View logo = getLayoutInflater().inflate(R.layout.view_logo, null); toolbar.addView(logo);

y aquí es cómo u puede ocultar vistas no deseadas

for (int i = 0; i < toolbar.getChildCount(); ++i) { View child = toolbar.getChildAt(i); // here u can hide all text views for example. if (child instanceof TextView) { child.setVisibility(View.GONE ); } }

De esta manera es mucho mejor que escribir dos actividades.