Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Disposición del coordinador con la barra de herramientas en fragmentos o actividad

Con la nueva biblioteca de diseño hay varios diseños nuevos que cambian mucho cómo la barra de herramientas puede comportarse si el desarrollador así lo desea. Dado que los diferentes fragmentos tienen diferentes comportamientos y objetivos, por ejemplo, un fragmento de galería con una barra de herramientas colapsando mostrando una foto importante, o un fragmento sin una vista de desplazamiento que no necesita el appbarlayout para ocultar la barra de herramientas, con una sola barra de herramientas en la actividad Resultan difíciles.

Así que con esto, ¿debo mover la barra de herramientas a cada fragmento? Si es así, tengo que configurar el supportActionBar cada vez que muestre un fragmento y también tenga una referencia de la actividad en el fragmento que anula la naturaleza independiente de los fragmentos. Si dejo la barra de herramientas en la Actividad solo, tengo que tener múltiples diseños definidos para cada tipo de comportamiento en cada fragmento. ¿Cuál sería el mejor enfoque?

  • Android - Viewpager y fragmentos, los métodos no funcionan
  • Implementación de DatePicker en Fragmento
  • DialogFragment de Android vs Diálogo
  • Guardar el estado de MapFragment (Maps v2) en Android
  • FragmentStatePageAdapter duplica elementos del menú ActionBar
  • Uso de ViewPager con fragmentos nativos
  • Pasar los datos de los elementos de los clics hechos por RecyclerView CardView a la actividad
  • Implementación de pestañas de barras de acción con fragmentos
  • 3 Solutions collect form web for “Disposición del coordinador con la barra de herramientas en fragmentos o actividad”

    En cuanto a mí suena demasiado raro tener appbar y barra de herramientas en cada fragmento. Así que he elegido tener una sola appbar con barra de herramientas en actividad.

    Para solucionar ese problema con CoordinatorLayout tendrá que configurar un comportamiento diferente de FrameLayout (o cualquier otro Layout) que supuestamente contenga fragmentos de cada fragmento que desee anular el comportamiento predeterminado.

    Supongamos que su comportamiento predeterminado es app:layout_behavior="@string/appbar_scrolling_view_behavior"

    Entonces en tu fragment_activity_layout.xml puedes tener algo como eso:

     <android.support.design.widget.CoordinatorLayout android:id="@+id/coordinator" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/dashboard_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.Toolbar" app:layout_scrollFlags="scroll|enterAlways"/> </android.support.design.widget.AppBarLayout> <FrameLayout android:id="@+id/dashboard_content" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> </android.support.design.widget.CoordinatorLayout> 

    Y en cada fragmento no deseas implementar la app:layout_behavior="@string/appbar_scrolling_view_behavior" tendrás que anular los métodos onAttach y onDetach que cambiarán el comportamiento de tu FrameLayout :

     CoordinatorLayout.Behavior behavior; @Override public void onAttach(Activity activity) { super.onAttach(activity); if(behavior != null) return; FrameLayout layout =(FrameLayout) getActivity().findViewById(R.id.dashboard_content); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) layout.getLayoutParams(); behavior = params.getBehavior(); params.setBehavior(null); } @Override public void onDetach() { super.onDetach(); if(behavior == null) return; FrameLayout layout =(FrameLayout) getActivity().findViewById(R.id.dashboard_content); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) layout.getLayoutParams(); params.setBehavior(behavior); layout.setLayoutParams(params); behavior = null; } 

    Después de que CoordinatorLayout no se derrumbará appbar, etc y permitirá que los fragmentos de diseños para ser de altura completa.

    Aquí está mi solución

     <!-- Put your fragment inside a Framelayout and set the behavior for this FrameLayout --> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <!-- Your fragment --> <include layout="@layout/content_main" /> </FrameLayout> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> 

    Esta es una muy buena pregunta: ¿debe mantenerse la Toolbar s que necesita actuar como una ActionBar en una Activity o un Fragment ? Después de haber buscado alrededor de diferentes preguntas y documentación, no pude encontrar una solución que cubra todos los casos. Por lo tanto, realmente depende de su situación que camino a seguir.

    Caso 1: La barra de herramientas debe ser reemplazo de ActionBar

    Si la barra de herramientas tiene que comportarse como una ActionBar normal (o si se muestra un máximo de 1 fragmento de vez en cuando), creo que la mejor / más simple manera es utilizar las Activities tradicionales con su propia barra de herramientas y poner su fragmento allí. De esta manera no tiene que preocuparse acerca de qué barra de herramientas debe mostrarse.

    Cambiar el ActionBar (-behaviour) de Fragmentos también es posible, pero yo no lo recomendaría, ya que eso te obliga a seguir la pista que Fragmento cambió el ActionBar cuando. Ni siquiera sé si la configuración de la ActionBar se puede hacer varias veces.

    Caso 2: Cada fragmento debe tener su propia (parte de) Barra de herramientas

    También puede optar por poner diferentes barras de herramientas independientes en diferentes fragmentos, con sus propias acciones. De esta manera puedes mostrar diferentes Fragmentos uno junto al otro – cada uno con sus propias acciones en su Barra de Herramientas – y sugerir que es 1 Barra de Herramientas (tal vez como la aplicación de Gmail, aunque no estoy seguro). Esto sin embargo significa que usted tendría que inflar esas barras de herramientas usted mismo, pero no debe ser muy difícil.

    Espero que esto ayude a hacer una elección.

    (Lo siento si hice cualquier (idioma) errores)

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.