Cómo compartir el diseño común entre las actividades sin fragmento
¿Hay alguna manera posible de compartir el diseño (parte) entre las actividades? Por ejemplo, en mi aplicación, todas las actividades tienen un diseño similar, la parte superior es el indicador de operación larga (una barra de progreso, oculto cuando no se ejecuta ninguna operación), la parte inferior es para mostrar errores. Sólo la parte media es diferente para todas las actividades. Vea la imagen de abajo.
- Paquetes separados de Android
- RunOnUiThread en el fragmento
- ¿Cómo actualizar el lanzador de aplicaciones después de activar / desactivar un alias de actividad?
- Calcula cuánto tráfico de red generan otras aplicaciones de Android
- Activity.runOnUiThread de Android no es estático, así que ¿cómo puedo usarlo?
Así que mi pregunta es, ¿es posible reutilizar el diseño común (parte de carga y error) para todas las actividades de mi aplicación? (Actualmente no quiero usar fragmento para hacerlo por algunas razones)
Tal vez los recursos de diseño deberían gustar esto:
Carpeta de diseño
activity_common.xml activity_one_content.xml activity_two_content.xml
Gracias
- Iniciar la actividad PRINCIPAL de la aplicación actual sin saber su nombre
- Cómo comprobar si una actividad se está ejecutando o no
- ¿Qué es una actividad no incrustada y por qué no funciona android: fitsSystemWindows?
- Cómo acceder a variables de actividad de un fragmento Android
- Android: dos actividades, una pestaña
- Uso de un proyecto de biblioteca de Android Actividad dentro de otro proyecto
- Android: ¿Cómo pasar los datos a las sub-actividades?
- Equivalente de iOS para iniciar una actividad en Android
Puede crear una actividad abstracta de "base" de la que todas sus actividades se extiendan, reemplazando setContentView para combinar la base y las disposiciones de subactividad.
De esta manera puede manejar todo el código de carga / error en la actividad base y simplemente alternar entre ocultar y mostrar las vistas en las sub actividades.
La actividad abstracta:
public abstract class BaseActivity extends Activity { protected RelativeLayout fullLayout; protected FrameLayout subActivityContent; @Override public void setContentView(int layoutResID) { fullLayout = (RelativeLayout) getLayoutInflater().inflate(R.layout.activity_base, null); // The base layout subActivityContent = (FrameLayout) fullLayout.findViewById(R.id.content_frame); // The frame layout where the activity content is placed. getLayoutInflater().inflate(layoutResID, subActivityContent, true); // Places the activity layout inside the activity content frame. super.setContentView(fullLayout); // Sets the content view as the merged layouts. } }
El archivo de diseño:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- The main content view --> <FrameLayout android:id="@+id/loading_frame" android:layout_width="match_parent" android:layout_height="wrap_content" /> <!-- The main content view --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <FrameLayout android:id="@+id/error_frame" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout>
Usted podría utilizar include
en XML
para, así .. incluir la parte reutilizable de su código de diseño.
Por ejemplo, aquí está mi archivo de diseño para la Toolbar
que usé en mi aplicación:
// /res/layout/component_toolbar.xml <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:taggr="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/primary" android:minHeight="?attr/actionBarSize" taggr:popupTheme="@style/ThemeOverlay.AppCompat.Light" taggr:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
Ahora, diga si quiero usar esa Toolbar
nuevo en una Activity
diferente, esto es todo lo que tendría que escribir:
// /res/layout/whatever_layout_this_might_be.xml <include layout="@layout/component_toolbar" />
Tenga en cuenta que esto sólo copiar el diseño – no el comportamiento real de dicho widget / componente.
Si quieres copiar todos los aspectos (layout, comportamiento), me temo que Fragment
es el único camino a seguir.
Aunque ActivityGroup está deprecated fro API 13, pero si no desea ir con fragmentos, entonces esto puede ser su mejor opción.
Según la documentación, un ActivityGroup es:
Una pantalla que contiene y ejecuta varias actividades incrustadas.
Puede encontrar un tutorial aquí y aquí Aunque el mencionado tutorial utiliza un Tablayout puede reemplazarlo con su diseño común en XML.
Un segundo enfoque podría ser Reutilizar el diseño con etiqueta de inclusión , en este enfoque podría reutilizar su diseño creado una sola vez en todas partes en la aplicación.