2014-11-19 12 views
11

Esiste un modo per condividere il layout (parte) tra le attività? Ad esempio, nella mia app, tutte le attività hanno un layout simile, la parte superiore è un indicatore di funzionamento lungo (una barra di avanzamento, nascosta quando nessuna operazione è in esecuzione), la parte inferiore è per mostrare errori. Solo la parte centrale è diversa per tutte le attività. Guarda l'immagine qui sotto.Come condividere il layout comune tra le attività senza frammento

enter image description here

quindi la mia domanda è, è possibile riutilizzare il layout comune (carico e parte errore) per tutte le attività nella mia app? (Attualmente non voglio usare frammento di farlo per alcuni motivi)

forse le risorse di layout dovrebbero in questo modo:

layoutfolder

activity_common.xml 

activity_one_content.xml 

activity_two_content.xml 

grazie

+1

Vedere questo documento http://developer.android.com/training/improving-layouts/reusing-layouts.html –

risposta

13

È possibile creare un'attività di "base" astratta da cui tutte le attività si estendono, eseguendo l'override di setContentView per unire la base e i layout di attività secondarie.

In questo modo è possibile gestire tutto il codice di caricamento/errore nell'attività di base e passare semplicemente tra nascondere e mostrare le visualizzazioni nelle attività secondarie.

L'attività abstract:

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. 
    } 

} 

il file di layout:

<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> 
4

Si potrebbe utilizzare include in XML per, beh .. includi la parte riutilizzabile del tuo codice di layout.

A titolo di esempio, ecco il mio file di layout per la Toolbar ho usato nel mio app:

// /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" /> 

Ora, dicono, se voglio usare quella Toolbar ancora una volta in una diversa Activity, questo è tutto quello che avevo dovuto scrivere:

// /res/layout/whatever_layout_this_might_be.xml 

<include layout="@layout/component_toolbar" /> 

Tenete a mente che questo sarebbe solo copiare il layout - non il comportamento effettivo di detto widget di/component.

Se si desidera effettivamente copiare tutti gli degli aspetti (layout, comportamento) ho paura Fragment è l'unico modo per andare.

0

Anche se ActivityGroup è deprecato fro API 13, ma se non si desidera andare con frammenti allora questo può essere il vostro migliore scelta.

Secondo la documentazione, un ActivityGroup è:

una schermata che contiene e gestisce molteplici attività embedded.

È possibile trovare un tutorial here e here Sebbene il tutorial citato usa un Tablayout è possibile sostituire quello con il layout comune in XML.

Un secondo approccio potrebbe essere Reuse the layout with include tag, in questo approccio è possibile riutilizzare il layout comune una volta creato ovunque nell'app.

Problemi correlati