2011-04-27 25 views
7

Estoy tratando de reproducir Honeycomb GMail UI con fragmentos y no puedo. Aquí es lo que quieroReproducción de Honeycomb GMail UI con fragmentos

Estado inicial:

+--------+---------------+ 
|  |    | 
|Accounts| Folders  | 
|  |    | 
+--------+---------------+ 

después de la carpeta se selecciona:

+--------+---------------+ 
|  |    | 
|Folders | Items  | 
|  |    | 
+--------+---------------+ 

donde las cuentas, carpetas y elementos que son fragmentos. (Obviamente vuelta botón debe ir al estado inicial)

Probé la siguiente distribución:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:id="@+id/root"> 

    <FrameLayout 
    android:id="@+id/left_pane" android:layout_weight="1" 
    android:layout_width="0px" android:layout_height="match_parent" /> 

    <FrameLayout 
     android:id="@+id/right_pane" android:layout_weight="1.6" 
     android:layout_width="0px" android:layout_height="match_parent" /> 
</LinearLayout> 

Desafortunadamente esto no funciona porque no puedo mover mi fragmento de carpetas de panel derecho al panel izquierdo (fragmento puede ser agregado solo una vez). En su lugar, puedo crear nuevas carpetas, pero eso es bastante desperdicio de recursos, necesita una administración cuidadosa del estado (especialmente cuando se presione el botón Atrás) y no se ve como quiero que se vea.

Intenté usar 3 FrameLayouts (izquierda, centro, derecha con los pesos 1, 1.6, 2.56) pero no puedo hacer que FrameLayout colapse cuando el fragmento no se muestra. Cualquier ayuda es realmente apreciada

+0

... Cambiar el FrameLayouts a fragmentos. ??? –

+0

Creo que esto no funcionará porque no puede especificar parámetros de diseño al agregar fragmentos al contenedor (consulte la clase FramentTransaction). – mikea

+0

Consulte la muestra API de Honeycomb Gallery. –

Respuesta

2

Creo que podría utilizar 3 FrameLayouts y ocultar el marco no utilizado. Entonces, inicialmente, el marco Elementos está oculto. Cuando se selecciona un elemento en el marco Carpetas, el marco Cuentas está oculto y la fama Artículos se hace visible. El cuadro Carpeta (o la actividad principal) tendría que interceptar el botón Atrás para que pueda ocultar el cuadro Elementos y hacer visible el Marco de la cuenta.

6

Usar el diseño de tres marcos como lo sugiere la publicación de Nicholas funciona muy bien en mi aplicación. Para mantener las proporciones correctas, es posible que tenga que cambiar los pesos de diseño dinámicamente (aunque supongo que sería posible no hacerlo). Yo uso este método de ayuda para manejar toda esta lógica. Tenga en cuenta que necesita un par de ayudantes; en general, debe quedar claro lo que esos deben hacer a partir de su nombre, por lo que no los publiqué aquí. Una cosa, sin embargo, es que tengo una matriz de miembros que contiene todos los titulares de cuadros, por lo que este método puede ocultar automáticamente todo lo que no se desee.

final private void showFrames(View leftFrame, View rightFrame) { 
    // Hide frames that should be gone 
    for (View frame : mContentFrames) { 
     if (frame != leftFrame && frame != rightFrame) { 
      frame.setVisibility(View.GONE); 
      Fragment frag = getFragmentManager().findFragmentById(frame.getId()); 
      if (frag != null) { 
       getFragmentTransaction().remove(frag); 
      } 
     } 
    } 

    // Set up the left frame 
    if (leftFrame != null) { 
     leftFrame.setVisibility(View.VISIBLE); 
     leftFrame.setLayoutParams(new LayoutParams(0, LayoutParams.FILL_PARENT, 3)); 
    } 

    // Set up the right frame 
    if (rightFrame != null) { 
     rightFrame.setVisibility(View.VISIBLE); 
     rightFrame.setLayoutParams(new LayoutParams(0, LayoutParams.FILL_PARENT, 7)); 
    } 

    // TODO: set up animation 

    // Start the transition 
    commitTransition(); 
} 

Hope that helps! --randy

+0

Por curiosidad, ¿podría informarnos cuál es su aplicación?Sería genial ver esto en acción. – Mimminito