android menu slidingdrawer

android - cajón deslizante aparece en todas las actividades



menu slidingdrawer (3)

Sé que esto es dos años tarde, pero para aquellos a quienes les gustaría una respuesta, aquí está. El señor Orlov tuvo una respuesta adecuada, solo se necesitan algunos ajustes.

  • eliminar el resumen después de público. (esto es lo que causa un error)
  • envuelva AMBOS su cajón deslizante y FrameLayout con otro FrameLayout y configure el ancho y alto para match_parent. (Esto permite que aparezcan AMBOS diseños).

TAMBIÉN: Si desea que su cajón deslizante aparezca en la parte superior de su diseño (¡duh!), Coloque el frameLayout que está después del deslizador deslizante antes del deslizadorDrawer.

Estoy desarrollando una aplicación que contiene muchas actividades y creé mi propio menú (no quiero usar el botón de menú incorporado) con el cajón deslizante, ya que el cajón deslizante está en la parte inferior de la pantalla y contiene mis botones de menú.

lo que necesito es hacer que ese cajón deslizante aparezca en todas mis actividades

intenté crear una actividad y establecer su vista de contenido en el archivo xml que incluye el cajón y luego extender esa actividad en todas las demás actividades, pero esta solución no funciona

entonces alguna sugerencia?


Finalmente, después de 3 años, esta es la solución completa a esta importante pregunta para la que puede no haber sido completamente guiado por la respuesta del Sr. Orlov.

Su método para hacer una vista jerárquica estaba completamente bien, pero había algunos pequeños errores que pueden inducir a error a los desarrolladores principiantes.

  1. Como también mencionó Gabe, puedes deshacerte del resumen en la declaración.
  2. No es necesario envolver a ambos niños con FrameLayout. El padre podría ser cualquier RelativeLayout, LinearLayout, etc. Pero la parte más importante es que debe declarar el FrameLayout antes del control deslizante.

Entonces, la solución al 100% de trabajo sería así:

activity_drawer.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/drawer_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <YourDrawer android:id="@+id/drawer_drawer" android:layout_width="match_parent" android:layout_height="fill_parent" > </YourDrawer> </RelativeLayout>

DrawerActivity.java

public class DrawerActivity extends Activity { protected RelativeLayout fullLayout; protected FrameLayout frameLayout; @Override public void setContentView(int layoutResID) { fullLayout = (RelativeLayout) getLayoutInflater().inflate(R.layout.activity_drawer, null); frameLayout = (FrameLayout) fullLayout.findViewById(R.id.drawer_frame); getLayoutInflater().inflate(layoutResID, frameLayout, true); super.setContentView(fullLayout); //Your drawer content... } }

MainActivity.java

public class MainActivity extends DrawerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }

No olvides declarar DrawerActivity en manifiesto.

Espero que haya ayudado.


Extender es el camino correcto. Simplemente anule setContentView de la manera correcta. Este es el ejemplo de trabajo, pero en lugar de un cajón, utilizo una barra de pestañas personalizada creada:

Defina un diseño con su cajón de esta manera:

esto es act_layout.xml

<LinearLayout ... android:orientation="vertical" > <YourDrawer ... /> <FrameLayout android:id="@+id/act_content" ... > // Here will be all activity content placed </FrameLayout> </LinearLayout>

Esta será su disposición base para contener todos los demás diseños en el marco act_content. Luego, crea una clase de actividad base y haz lo siguiente:

public abstract class DrawerActivity extends Activity { protected LinearLayout fullLayout; protected FrameLayout actContent; @Override public void setContentView(final int layoutResID) { // Your base layout here fullLayout= (LinearLayout) getLayoutInflater().inflate(R.layout.act_layout, null); actContent= (FrameLayout) fullLayout.findViewById(R.id.act_content); // Setting the content of layout your provided to the act_content frame getLayoutInflater().inflate(layoutResID, actContent, true); super.setContentView(fullLayout); // here you can get your drawer buttons and define how they // should behave and what must they do, so you won''t be // needing to repeat it in every activity class } }

Lo que hacemos, básicamente, es interceptar todas las llamadas a setContentView (int resId), inflar nuestro diseño de cajón desde xml, inflar nuestro diseño para la actividad (por reId proporcionado en la llamada al método), combinarlos como necesitamos, y establecer como el contentView de la actividad.

EDITAR: después de haber creado las cosas anteriores, solo proceda a escribir una aplicación como de costumbre, cree diseños (sin mencionar ningún cajón) y cree actividades, pero en lugar de extender la actividad simple, extienda DrawerActivity, de esta forma:

public abstract class SomeActivity extends DrawerActivity { protected void onCreate(Bundle bundle) { setContentView(R.layout.some_layout); } }

Lo que ocurre es que se intercepta setContentView (R.layout.some_layout). Your DrawerActivity carga el diseño que proporcionó desde xml, carga un diseño estándar para su cajón, los combina y luego lo configura como contentView para la actividad.