2011-03-17 17 views
17

Estoy buscando una manera de inflar otro diseño en el primer diseño en Android. ¿Cómo podría uno hacer esto? Aquí están los dos archivos XML. El primero es el diseño principal, el segundo es el diseño que me gustaría inflar en el primero.¿Inflar una vista/diseño en otro diseño?

No puedo simplemente incluir el diseño, ya que usaré este método para inflar otros diseños en marcos de alambre más adelante.

Código también en: http://pastebin.com/wjZ4s1cs como stackoverflow no le gusta XML.

<?xml version="1.0" encoding="utf-8"?> 
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#ff000000" 
    > 
    <TextView 
     android:id="@+id/headerMenuText" 
     android:text="@string/main_menu_title" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:textSize="16pt" 
     android:paddingTop="10px" 
     android:paddingBottom="10px" 
     android:gravity="center" 
    > 
    </TextView> 
    <TableLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_y="100dip" 
     android:gravity="center" 
     android:layout_gravity="center" 
    > 
     <TableRow 
      android:gravity="center" 
      android:layout_gravity="center"> 
      <ImageView 
       android:id="@+id/menuItem1" 
       android:layout_height="101dip" 
       android:layout_width="89dip" 
       android:src="@drawable/icon_settings" 
      ></ImageView> 

      <ImageView 
       android:id="@+id/menuItem2" 
       android:layout_height="101dip" 
       android:layout_width="89dip" 
       android:src="@drawable/icon_system_restart" 
      ></ImageView> 

      <ImageView 
       android:id="@+id/menuItem3" 
       android:layout_height="101dip" 
       android:layout_width="89dip" 
       android:src="@drawable/icon_game_history" 
      ></ImageView> 

      <ImageView 
       android:id="@+id/menuItem4" 
       android:layout_height="101dip" 
       android:layout_width="89dip" 
       android:src="@drawable/icon_game_correction" 
      ></ImageView> 

      <ImageView 
       android:id="@+id/menuItem5" 
       android:layout_height="101dip" 
       android:layout_width="89dip" 
       android:src="@drawable/icon_game_other" 
      ></ImageView> 
     </TableRow> 

     <TableRow android:gravity="center"> 
      <TextView 
       android:id="@+id/menuItemText1" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="@string/main_menu_item_text_1" 
       android:layout_gravity="center" 
       android:gravity="center" 
      ></TextView> 

      <TextView 
       android:id="@+id/menuItemText2" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="@string/main_menu_item_text_2" 
       android:layout_gravity="center" 
       android:gravity="center" 
      ></TextView> 

      <TextView 
       android:id="@+id/menuItemText3" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="@string/main_menu_item_text_3" 
       android:layout_gravity="center" 
       android:gravity="center" 
      ></TextView> 

      <TextView 
       android:id="@+id/menuItemText4" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="@string/main_menu_item_text_4" 
       android:layout_gravity="center" 
       android:gravity="center" 
      ></TextView> 

      <TextView 
       android:id="@+id/menuItemText5" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="@string/main_menu_item_text_5" 
       android:layout_gravity="center" 
       android:gravity="center" 
      ></TextView> 

     </TableRow> 
    </TableLayout> 
    <View or layout 
     android:id="@+id/screen_layout_bottom_menu" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    > 
    </View or layout> 
</AbsoluteLayout> 

Segunda diseño

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/screen_bottom_menu" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    > 
    <TableLayout 
     android:id="@+id/screen_bottom_menu_table" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
    > 
     <TableRow> 
      <ImageView 
       android:id="@+id/screen_bottom_menu_button_back" 
       android:src="@drawable/back"> 
      </ImageView> 

      <ImageView 
       android:id="@+id/screen_bottom_menu_button_ok" 
       android:src="@drawable/checkmark"> 
      </ImageView> 

      <ImageView 
       android:id="@+id/screen_bottom_menu_button_cancel" 
       android:src="@drawable/xmark"> 
      </ImageView> 

      <ImageView 
       android:id="@+id/screen_bottom_menu_button_key_toggle" 
       android:src="@drawable/lock"> 
      </ImageView> 
     </TableRow> 
    </TableLayout> 
</LinearLayout> 
+2

Código: culminante las líneas de código y presione el botón '{}', agregará 4 espacios al comienzo de cada línea -> código formateado. – bigstones

+0

AbsoluteLayout está en desuso porque no admite pantallas de diferentes tamaños. Use LinearLayout o RelativeLayout en su lugar. –

Respuesta

32

Hay ViewStub pero nunca lo he usado y creo que no se puede usar más de una vez.

Puede inflar el diseño del menú y adjuntarlo a la disposición principal:

AbsoluteLayout mainLayout = (AbsoluteLayout) findViewById(R.id.your_main_layout); 
LayoutInflater inflater = 
       (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View menuLayout = inflater.inflate(R.layout.your_menu_layout, mainLayout, true); 

luego cuando se quiere cambiar, se puede quitar:

mainLayout.removeView(menuLayout); 

y añadir otro de la misma manera.

Esto funcionará porque desea agregar el diseño como el último elemento secundario del diseño principal. Si desea agregar que, por ejemplo, en la primera posición, puede inflar su diseño sin adjuntarlo al padre (el uso false cuya última arg), y añadiendo que especificar manualmente el índice: formato

mainLayout.addView(menuLayout, 0); 
+2

Deprised. qué hay de nuevo ? –

+0

@ jeet.chanchawat ViewStub no parece estar en desuso? –

+1

'AbsoluteLayout' está privado –

6

No estoy seguro de que realmente entiende lo que había usted ción por "No puedo incluir la disposición que voy a utilizar este método para inflar otros diseños en el alambre cuadros más adelante. " Pero si necesita que el segundo diseño se coloque muchas veces en otros diseños, use <include layout="@layout/the_second_layout" /> en estos otros diseños.

+0

Conozco la etiqueta de inclusión, pero estaba buscando cambiar dinámicamente los diseños en lugar de un marcador de posición. –

Cuestiones relacionadas